MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / setIntersect

Function setIntersect

src/backend/opencl/set.cpp:101–136  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

99
100template<typename T>
101Array<T> setIntersect(const Array<T> &first, const Array<T> &second,
102 const bool is_unique) {
103 try {
104 Array<T> unique_first = first;
105 Array<T> unique_second = second;
106
107 if (!is_unique) {
108 unique_first = setUnique(first, false);
109 unique_second = setUnique(second, false);
110 }
111
112 size_t out_size =
113 std::max(unique_first.elements(), unique_second.elements());
114 Array<T> out = createEmptyArray<T>(dim4(out_size, 1, 1, 1));
115
116 compute::command_queue queue(getQueue()());
117
118 compute::buffer first_data((*unique_first.get())());
119 compute::buffer second_data((*unique_second.get())());
120 compute::buffer out_data((*out.get())());
121
122 compute::buffer_iterator<type_t<T>> first_begin(first_data, 0);
123 compute::buffer_iterator<type_t<T>> first_end(first_data,
124 unique_first.elements());
125 compute::buffer_iterator<type_t<T>> second_begin(second_data, 0);
126 compute::buffer_iterator<type_t<T>> second_end(
127 second_data, unique_second.elements());
128 compute::buffer_iterator<type_t<T>> out_begin(out_data, 0);
129
130 compute::buffer_iterator<type_t<T>> out_end = compute::set_intersection(
131 first_begin, first_end, second_begin, second_end, out_begin, queue);
132
133 out.resetDims(dim4(std::distance(out_begin, out_end), 1, 1, 1));
134 return out;
135 } catch (const std::exception &ex) { AF_ERROR(ex.what(), AF_ERR_INTERNAL); }
136}
137
138#define INSTANTIATE(T) \
139 template Array<T> setUnique<T>(const Array<T> &in, const bool is_sorted); \

Callers

nothing calls this directly

Calls 8

setUniqueFunction · 0.70
maxFunction · 0.70
dim4Class · 0.50
getQueueFunction · 0.50
distanceFunction · 0.50
elementsMethod · 0.45
getMethod · 0.45
resetDimsMethod · 0.45

Tested by

no test coverage detected