| 81 | |
| 82 | template<typename T> |
| 83 | Array<T> setIntersect(const Array<T> &first, const Array<T> &second, |
| 84 | const bool is_unique) { |
| 85 | Array<T> uFirst = first; |
| 86 | Array<T> uSecond = second; |
| 87 | |
| 88 | if (!is_unique) { |
| 89 | uFirst = setUnique(first, false); |
| 90 | uSecond = setUnique(second, false); |
| 91 | } |
| 92 | |
| 93 | dim_t first_elements = uFirst.elements(); |
| 94 | dim_t second_elements = uSecond.elements(); |
| 95 | dim_t elements = std::max(first_elements, second_elements); |
| 96 | |
| 97 | Array<T> out = createEmptyArray<T>(af::dim4(elements)); |
| 98 | |
| 99 | T *ptr = out.get(); |
| 100 | T *last = |
| 101 | set_intersection(uFirst.get(), uFirst.get() + first_elements, |
| 102 | uSecond.get(), uSecond.get() + second_elements, ptr); |
| 103 | |
| 104 | auto dist = static_cast<dim_t>(distance(ptr, last)); |
| 105 | dim4 dims(dist, 1, 1, 1); |
| 106 | out.resetDims(dims); |
| 107 | |
| 108 | return out; |
| 109 | } |
| 110 | |
| 111 | #define INSTANTIATE(T) \ |
| 112 | template Array<T> setUnique<T>(const Array<T> &in, const bool is_sorted); \ |