From dc8220add2107721c852f9ffe957405f4f3e871d Mon Sep 17 00:00:00 2001 From: Dmitriy Sobolev Date: Tue, 23 Sep 2025 15:21:27 +0100 Subject: [PATCH 1/3] Add the rest c++23 algorithms --- .../parallel_api/parallel_range_api.rst | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst index 1565ed522..b1f0515c1 100644 --- a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst +++ b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst @@ -198,6 +198,79 @@ Element Search Operations std::ranges::borrowed_iterator_t adjacent_find (ExecutionPolicy&& pol, R&& r, Pred pred = {}, Proj proj = {}); + // contains + template , Proj>> + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && + std::indirect_binary_predicate< std::ranges::equal_to, + std::projected, Proj>, + const T* > + bool contains (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {}); + + // contains_subrange + template + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && std::ranges::sized_range && + std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, + Pred, Proj1, Proj2 > + bool contains_subrange (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); + + // find_last + template , Proj>> + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && + std::indirect_binary_predicate< std::ranges::equal_to, + std::projected, Proj>, + const T* > + std::ranges::borrowed_subrange_t + find_last (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {}); + + // find_last_if + template , Proj> > Pred> + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range + std::ranges::borrowed_subrange_t + find_last_if (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {}); + + // find_last_if_not + template , Proj> > Pred> + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range + std::ranges::borrowed_subrange_t + find_last_if_not (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {}); + + // starts_with + template < typename ExecutionPolicy, std::ranges::random_access_range R1, + std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to, + typename Proj1 = std::identity, typename Proj2 = std::identity> + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && std::ranges::sized_range && + std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, + Pred, Proj1, Proj2 > + bool starts_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); + + // ends_with + template + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && std::ranges::sized_range && + std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, + Pred, Proj1, Proj2 > + bool ends_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); } Minimum and Maximum From c1921f38b44f72e1ff4baa9b4a8d43931dd15d41 Mon Sep 17 00:00:00 2001 From: Dmitriy Sobolev Date: Fri, 24 Oct 2025 18:27:23 +0100 Subject: [PATCH 2/3] Move starts_with, ends_with and contains_subrange into sequence search group --- .../parallel_api/parallel_range_api.rst | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst index b1f0515c1..33cec55c5 100644 --- a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst +++ b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst @@ -209,17 +209,6 @@ Element Search Operations const T* > bool contains (ExecutionPolicy&& pol, R&& r, const T& value, Proj proj = {}); - // contains_subrange - template - requires oneapi::dpl::is_execution_policy_v> && - std::ranges::sized_range && std::ranges::sized_range && - std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, - Pred, Proj1, Proj2 > - bool contains_subrange (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, - Proj1 proj1 = {}, Proj2 proj2 = {}); - // find_last template find_last_if_not (ExecutionPolicy&& pol, R&& r, Pred pred, Proj proj = {}); - // starts_with - template < typename ExecutionPolicy, std::ranges::random_access_range R1, - std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to, - typename Proj1 = std::identity, typename Proj2 = std::identity> - requires oneapi::dpl::is_execution_policy_v> && - std::ranges::sized_range && std::ranges::sized_range && - std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, - Pred, Proj1, Proj2 > - bool starts_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, - Proj1 proj1 = {}, Proj2 proj2 = {}); - - // ends_with - template - requires oneapi::dpl::is_execution_policy_v> && - std::ranges::sized_range && std::ranges::sized_range && - std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, - Pred, Proj1, Proj2 > - bool ends_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, - Proj1 proj1 = {}, Proj2 proj2 = {}); } Minimum and Maximum @@ -430,6 +398,39 @@ Sequence Search and Comparison std::ranges::sized_range && std::ranges::sized_range bool lexicographical_compare (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); + // contains_subrange + template + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && std::ranges::sized_range && + std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, + Pred, Proj1, Proj2 > + bool contains_subrange (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); + + // starts_with + template < typename ExecutionPolicy, std::ranges::random_access_range R1, + std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to, + typename Proj1 = std::identity, typename Proj2 = std::identity> + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && std::ranges::sized_range && + std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, + Pred, Proj1, Proj2 > + bool starts_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); + + // ends_with + template + requires oneapi::dpl::is_execution_policy_v> && + std::ranges::sized_range && std::ranges::sized_range && + std::indirectly_comparable< std::ranges::iterator_t, std::ranges::iterator_t, + Pred, Proj1, Proj2 > + bool ends_with (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); + } Sorting, Merge, and Heap Operations From 6e428d996fc536888d7ca3f33f25ee10444a9bc7 Mon Sep 17 00:00:00 2001 From: Dmitriy Sobolev Date: Fri, 24 Oct 2025 19:18:07 +0100 Subject: [PATCH 3/3] Add a line Co-authored-by: Dan Hoeflinger <109972525+danhoeflinger@users.noreply.github.com> --- .../elements/oneDPL/source/parallel_api/parallel_range_api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst index 33cec55c5..caab0266c 100644 --- a/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst +++ b/source/elements/oneDPL/source/parallel_api/parallel_range_api.rst @@ -398,6 +398,7 @@ Sequence Search and Comparison std::ranges::sized_range && std::ranges::sized_range bool lexicographical_compare (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); + // contains_subrange template