7#include <dr/mp/algorithms/inclusive_exclusive_scan_impl.hpp>
13auto inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op, T init) {
14 return __detail::inclusive_exclusive_scan_impl_<false>(
15 std::forward<R>(r), rng::begin(std::forward<O>(o)),
16 std::forward<BinaryOp>(binary_op), std::optional(init));
21auto inclusive_scan(R &&r, O &&o, BinaryOp &&binary_op) {
22 return __detail::inclusive_exclusive_scan_impl_<false>(
23 std::forward<R>(r), rng::begin(std::forward<O>(o)),
24 std::forward<BinaryOp>(binary_op));
29auto inclusive_scan(R &&r, O &&o) {
30 return dr::mp::inclusive_scan(std::forward<R>(r), std::forward<O>(o),
31 std::plus<rng::range_value_t<R>>());
37 typename BinaryOp,
typename T>
38OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first,
39 BinaryOp &&binary_op, T init) {
41 return dr::mp::inclusive_scan(rng::subrange(first, last), d_first,
42 std::forward<BinaryOp>(binary_op), init);
47OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first,
48 BinaryOp &&binary_op) {
50 auto dist = rng::distance(first, last);
51 auto d_last = d_first;
52 rng::advance(d_last, dist);
53 dr::mp::inclusive_scan(rng::subrange(first, last),
54 rng::subrange(d_first, d_last),
55 std::forward<BinaryOp>(binary_op));
60template <dr::distributed_iterator Iter, dr::distributed_iterator OutputIter>
61OutputIter inclusive_scan(Iter first, Iter last, OutputIter d_first) {
62 auto dist = rng::distance(first, last);
63 auto d_last = d_first;
64 rng::advance(d_last, dist);
65 dr::mp::inclusive_scan(rng::subrange(first, last),
66 rng::subrange(d_first, d_last));
Definition: concepts.hpp:42
Definition: concepts.hpp:31