| 30 | |
| 31 | template<typename T> |
| 32 | Array<T> setUnique(const Array<T> &in, const bool is_sorted) { |
| 33 | Array<T> out = createEmptyArray<T>(af::dim4()); |
| 34 | if (is_sorted) { |
| 35 | out = copyArray<T>(in); |
| 36 | } else { |
| 37 | out = sort<T>(in, 0, true); |
| 38 | } |
| 39 | |
| 40 | // Need to sync old jobs since we need to |
| 41 | // operator on pointers directly in std::unique |
| 42 | getQueue().sync(); |
| 43 | |
| 44 | T *ptr = out.get(); |
| 45 | T *last = unique(ptr, ptr + in.elements()); |
| 46 | auto dist = static_cast<dim_t>(distance(ptr, last)); |
| 47 | |
| 48 | dim4 dims(dist, 1, 1, 1); |
| 49 | out.resetDims(dims); |
| 50 | return out; |
| 51 | } |
| 52 | |
| 53 | template<typename T> |
| 54 | Array<T> setUnion(const Array<T> &first, const Array<T> &second, |