A preallocated backend storage for a proxyr is
an object s of type span<byte>
such that the range s remains valid and may be overwritten
until one of set_value, set_error, or set_stopped
is called on r.
For argument sndr of the above transform_sender,
let child, pol, shape and f
be defined by the following declarations:
auto&[_, data, child]= sndr;
auto&[pol, shape, f]= data;
The transform_sender overload
that accepts senders with tag bulk_chunked_t
returns a sender such that if it is connected to a receiver rcvr and
the resulting operation state is started, then:
If child completes with values vals,
let args be a pack of lvalue subexpressions designating vals,
then b.schedule_bulk_chunked(p ? shape :1, r, s) is called, where
r is a proxy for rcvr
with base parallel_scheduler_replacement::bulk_item_receiver_proxy
such that r.execute(i, j) for indices i and j
has effects equivalent to
f(i, j, args...) if p is true and
f(0, shape, args...) otherwise; and
The transform_sender overload
that accepts senders with tag bulk_unchunked_t
returns a sender such that if it is connected to a receiver rcvr and
the resulting operation state is started, then:
If child completes with values vals,
let args be a pack of lvalue subexpressions designating vals,
then b.schedule_bulk_unchunked(p ? shape :1, r, s) is called, where
r is a proxy for rcvr
with base parallel_scheduler_replacement::bulk_item_receiver_proxy
such that r.execute(i, i +1) for index i
has effects equivalent to
f(i, args...) if p is true and
for(decltype(shape) i =0; i < shape; i++){ f(i, args...); }
otherwise; and