@@ -410,6 +410,92 @@ Sorting and Merge
410
410
411
411
}
412
412
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
+
413
499
Copying Mutating Operations
414
500
+++++++++++++++++++++++++++
415
501
0 commit comments