| 35 | |
| 36 | template<typename T> |
| 37 | Array<T> setUnique(const Array<T> &in, const bool is_sorted) { |
| 38 | auto dpl_policy = ::oneapi::dpl::execution::make_device_policy(getQueue()); |
| 39 | |
| 40 | Array<T> out = copyArray<T>(in); |
| 41 | |
| 42 | auto out_begin = ::oneapi::dpl::begin(*out.get()); |
| 43 | auto out_end = out_begin + out.elements(); |
| 44 | |
| 45 | if (!is_sorted) { |
| 46 | std::sort(dpl_policy, out_begin, out_end, |
| 47 | [](auto lhs, auto rhs) { return lhs < rhs; }); |
| 48 | } |
| 49 | |
| 50 | out_end = std::unique(dpl_policy, out_begin, out_end); |
| 51 | |
| 52 | out.resetDims(dim4(std::distance(out_begin, out_end), 1, 1, 1)); |
| 53 | |
| 54 | return out; |
| 55 | } |
| 56 | |
| 57 | template<typename T> |
| 58 | Array<T> setUnion(const Array<T> &first, const Array<T> &second, |