Skip to content

Commit 51eec18

Browse files
[oneDPL] Add set parallel range algorithms (#630)
1 parent c64b530 commit 51eec18

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

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

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,92 @@ Sorting and Merge
410410
411411
}
412412
413+
Set operations
414+
++++++++++++++
415+
416+
.. code:: cpp
417+
418+
// Defined in <oneapi/dpl/algorithm>
419+
420+
namespace oneapi::dpl::ranges {
421+
422+
// includes
423+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
424+
std::ranges::random_access_range R2,
425+
typename Proj1 = std::identity, typename Proj2 = std::identity,
426+
std::indirect_strict_weak_order< std::projected<std::ranges::iterator_t<R1>, Proj1>,
427+
std::projected<std::ranges::iterator_t<R2>, Proj2> >
428+
Comp = std::ranges::less>
429+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
430+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2>
431+
bool includes (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Comp comp = {},
432+
Proj1 proj1 = {}, Proj2 proj2 = {});
433+
434+
// set_union
435+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
436+
std::ranges::random_access_range R2, std::ranges::random_access_range OutR,
437+
typename Comp = std::ranges::less, typename Proj1 = std::identity,
438+
typename Proj2 = std::identity>
439+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
440+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
441+
std::ranges::sized_range<OutR> &&
442+
std::mergeable<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
443+
std::ranges::iterator_t<OutR>, Comp, Proj1, Proj2>
444+
std::ranges::set_union_result<std::ranges::borrowed_iterator_t<R1>,
445+
std::ranges::borrowed_iterator_t<R2>,
446+
std::ranges::borrowed_iterator_t<OutR>>
447+
set_union (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result, Comp comp = {},
448+
Proj1 proj1 = {}, Proj2 proj2 = {});
449+
450+
// set_intersection
451+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
452+
std::ranges::random_access_range R2, std::ranges::random_access_range OutR,
453+
typename Comp = std::ranges::less, typename Proj1 = std::identity,
454+
typename Proj2 = std::identity>
455+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
456+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
457+
std::ranges::sized_range<OutR> &&
458+
std::mergeable<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
459+
std::ranges::iterator_t<OutR>, Comp, Proj1, Proj2>
460+
std::ranges::set_intersection_result<std::ranges::borrowed_iterator_t<R1>,
461+
std::ranges::borrowed_iterator_t<R2>,
462+
std::ranges::borrowed_iterator_t<OutR>>
463+
set_intersection (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result, Comp comp = {},
464+
Proj1 proj1 = {}, Proj2 proj2 = {});
465+
466+
// set_difference
467+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
468+
std::ranges::random_access_range R2, std::ranges::random_access_range OutR,
469+
typename Comp = std::ranges::less, typename Proj1 = std::identity,
470+
typename Proj2 = std::identity>
471+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
472+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
473+
std::ranges::sized_range<OutR> &&
474+
std::mergeable<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
475+
std::ranges::iterator_t<OutR>, Comp, Proj1, Proj2>
476+
std::ranges::set_difference_result<std::ranges::borrowed_iterator_t<R1>,
477+
std::ranges::borrowed_iterator_t<R2>,
478+
std::ranges::borrowed_iterator_t<OutR>>
479+
set_difference (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result, Comp comp = {},
480+
Proj1 proj1 = {}, Proj2 proj2 = {});
481+
482+
// set_symmetric_difference
483+
template <typename ExecutionPolicy, std::ranges::random_access_range R1,
484+
std::ranges::random_access_range R2, std::ranges::random_access_range OutR,
485+
typename Comp = std::ranges::less, typename Proj1 = std::identity,
486+
typename Proj2 = std::identity>
487+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
488+
std::ranges::sized_range<R1> && std::ranges::sized_range<R2> &&
489+
std::ranges::sized_range<OutR> &&
490+
std::mergeable<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>,
491+
std::ranges::iterator_t<OutR>, Comp, Proj1, Proj2>
492+
std::ranges::set_symmetric_difference_result<std::ranges::borrowed_iterator_t<R1>,
493+
std::ranges::borrowed_iterator_t<R2>,
494+
std::ranges::borrowed_iterator_t<OutR>>
495+
set_symmetric_difference (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result,
496+
Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {});
497+
}
498+
413499
Copying Mutating Operations
414500
+++++++++++++++++++++++++++
415501

0 commit comments

Comments
 (0)