@@ -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