Skip to content

Commit dc7f63d

Browse files
[oneDPL] Add more copying mutating parallel range algorithms
1 parent 1ea5088 commit dc7f63d

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

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

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,68 @@ Copying Mutating Operations
429429
std::ranges::borrowed_iterator_t<OutR>>
430430
move (ExecutionPolicy&& pol, R&& r, OutR&& result);
431431
432+
// partition_copy
433+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
434+
std::ranges::random_access_range OutR1, std::ranges::random_access_range OutR2,
435+
typename Proj = std::identity,
436+
std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
437+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
438+
std::ranges::sized_range<R> && std::ranges::sized_range<OutR1> &&
439+
std::ranges::sized_range<OutR2> &&
440+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR1>> &&
441+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR2>>
442+
std::ranges::partition_copy_result<std::ranges::borrowed_iterator_t<R>,
443+
std::ranges::borrowed_iterator_t<OutR1>,
444+
std::ranges::borrowed_iterator_t<OutR2>>
445+
partition_copy (ExecutionPolicy&& pol, R&& r, OutR1&& out_true_r, OutR2&& out_false_r,
446+
Pred pred, Proj proj = {});
447+
448+
// remove_copy
449+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
450+
std::ranges::random_access_range OutR, typename Proj = std::identity,
451+
typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
452+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
453+
std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
454+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>> &&
455+
std::indirect_binary_predicate< std::ranges::equal_to,
456+
std::projected<std::ranges::iterator_t<R>, Proj>,
457+
const T* >
458+
std::ranges::remove_copy_result<std::ranges::borrowed_iterator_t<R>,
459+
std::ranges::borrowed_iterator_t<OutR>>
460+
remove_copy (ExecutionPolicy&& pol, R&& r, OutR&& result, const T& value, Proj proj = {});
461+
462+
// remove_copy_if
463+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
464+
std::ranges::random_access_range OutR, typename Proj = std::identity,
465+
std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
466+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
467+
std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
468+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>>
469+
std::ranges::remove_copy_if_result<std::ranges::borrowed_iterator_t<R>,
470+
std::ranges::borrowed_iterator_t<OutR>>
471+
remove_copy_if (ExecutionPolicy&& pol, R&& r, OutR&& result, Pred pred, Proj proj = {});
472+
473+
// reverse_copy
474+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
475+
std::ranges::random_access_range OutR>
476+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
477+
std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
478+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>>
479+
std::ranges::reverse_copy_result<std::ranges::borrowed_iterator_t<R>,
480+
std::ranges::borrowed_iterator_t<OutR>>
481+
reverse_copy (ExecutionPolicy&& pol, R&& r, OutR&& result);
482+
483+
// rotate_copy
484+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
485+
std::ranges::random_access_range OutR>
486+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
487+
std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
488+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>>
489+
std::ranges::rotate_copy_result<std::ranges::borrowed_iterator_t<R>,
490+
std::ranges::borrowed_iterator_t<OutR>>
491+
rotate_copy (ExecutionPolicy&& pol, R&& r, std::ranges::iterator_t<R> middle,
492+
OutR&& result);
493+
432494
// transform (unary)
433495
template <typename ExecutionPolicy, std::ranges::random_access_range R,
434496
std::ranges::random_access_range OutR, std::copy_constructible Fn,
@@ -458,6 +520,18 @@ Copying Mutating Operations
458520
transform (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result, Fn binary_op,
459521
Proj1 proj1 = {}, Proj2 proj2 = {});
460522
523+
// unique_copy
524+
template <typename ExecutionPolicy, std::ranges::random_access_range R,
525+
std::ranges::random_access_range OutR, typename Proj = std::identity,
526+
std::indirect_equivalence_relation< std::projected<std::ranges::iterator_t<R>, Proj> >
527+
Comp = std::ranges::equal_to>
528+
requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
529+
std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
530+
std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>>
531+
std::ranges::unique_copy_result<std::ranges::borrowed_iterator_t<R>,
532+
std::ranges::borrowed_iterator_t<OutR>>
533+
unique_copy (ExecutionPolicy&& pol, R&& r, OutR&& result, Comp comp = {}, Proj proj = {});
534+
461535
}
462536
463537
In-place Mutating Operations

0 commit comments

Comments
 (0)