7#include <dr/detail/ranges_shim.hpp>
17 auto copy = [](
auto &&v) { std::get<1>(v) = std::get<0>(v); };
19 for_each(views::zip(in, views::counted(out, rng::size(in))), copy);
23template <dr::distributed_iterator DI_IN>
25 copy(rng::subrange(first, last), out);
28template <std::contiguous_iterator CI_IN>
29void copy(CI_IN &&first, CI_IN &&last,
31 copy(0, rng::subrange(first, last), out);
34void copy(rng::contiguous_range
auto &&in,
40 std::contiguous_iterator
auto out) {
46 std::contiguous_iterator
auto out) {
47 if (default_comm().rank() == root) {
48 for (
const auto &segment : dr::ranges::segments(in)) {
49 auto sz = rng::size(segment);
50 rng::begin(segment).get(std::to_address(out), sz);
58void copy(std::size_t root, rng::contiguous_range
auto &&in,
60 if (default_comm().rank() == root) {
61 auto in_ptr = std::to_address(in.begin());
62 for (
auto remainder = rng::size(in); remainder > 0;) {
63 auto segment = *(dr::ranges::segments(out).begin());
64 auto sz = std::min(rng::size(segment), remainder);
66 rng::begin(segment).put(in_ptr, sz);
Definition: concepts.hpp:51
Definition: concepts.hpp:42
Definition: concepts.hpp:31