Skip to content

Commit b712078

Browse files
[oneDPL][ranges] Add c++23 search algorithms (#648)
1 parent ae6a4d2 commit b712078

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

source/elements/oneDPL/source/parallel_api/parallel_range_api.rst

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,47 @@ Element Search Operations
198198
std::ranges::borrowed_iterator_t<R>
199199
adjacent_find (ExecutionPolicy&& pol, R&& r, Pred pred = {}, Proj proj = {});
200200
201+
// contains
202+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
203+
typename Proj = std::identity,
204+
typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
205+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
206+
std::ranges::sized_range<R> &&
207+
std::indirect_binary_predicate< std::ranges::equal_to,
208+
std::projected<std::ranges::iterator_t<R>, Proj>,
209+
const T* >
210+
bool contains (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {});
211+
212+
// find_last
213+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
214+
typename Proj = std::identity,
215+
typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
216+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
217+
std::ranges::sized_range<R> &&
218+
std::indirect_binary_predicate< std::ranges::equal_to,
219+
std::projected<std::ranges::iterator_t<R>, Proj>,
220+
const T* >
221+
std::ranges::borrowed_subrange_t<R>
222+
find_last (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {});
223+
224+
// find_last_if
225+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
226+
typename Proj = std::identity,
227+
std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
228+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
229+
std::ranges::sized_range<R>
230+
std::ranges::borrowed_subrange_t<R>
231+
find_last_if (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {});
232+
233+
// find_last_if_not
234+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
235+
typename Proj = std::identity,
236+
std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
237+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
238+
std::ranges::sized_range<R>
239+
std::ranges::borrowed_subrange_t<R>
240+
find_last_if_not (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {});
241+
201242
}
202243
203244
Minimum and Maximum
@@ -357,6 +398,40 @@ Sequence Search and Comparison
357398
std::ranges::sized_range<R1> && std::ranges::sized_range<R2>
358399
bool lexicographical_compare (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Comp comp = {},
359400
Proj1 proj1 = {}, Proj2 proj2 = {});
401+
402+
// contains_subrange
403+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
404+
std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
405+
typename Proj1 = std::identity, typename Proj2 = std::identity>
406+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
407+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
408+
std::indirectly_comparable< std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
409+
Pred, Proj1, Proj2 >
410+
bool contains_subrange (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {},
411+
Proj1 proj1 = {}, Proj2 proj2 = {});
412+
413+
// starts_with
414+
template < typename ExecutionPolicy, std::ranges::random_access_range R1,
415+
std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
416+
typename Proj1 = std::identity, typename Proj2 = std::identity>
417+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
418+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
419+
std::indirectly_comparable< std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
420+
Pred, Proj1, Proj2 >
421+
bool starts_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {},
422+
Proj1 proj1 = {}, Proj2 proj2 = {});
423+
424+
// ends_with
425+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
426+
std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
427+
typename Proj1 = std::identity, typename Proj2 = std::identity>
428+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
429+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
430+
std::indirectly_comparable< std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
431+
Pred, Proj1, Proj2 >
432+
bool ends_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {},
433+
Proj1 proj1 = {}, Proj2 proj2 = {});
434+
360435
}
361436
362437
Sorting, Merge, and Heap Operations

0 commit comments

Comments
 (0)