Skip to content

Commit 385b183

Browse files
committed
Allow system_context to be customized for bulk even if there is no receiver environment.
1 parent cf0a38f commit 385b183

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

include/exec/system_context.hpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ namespace exec {
9898
/// The execution domain of the parallel_scheduler, used for the purposes of customizing
9999
/// sender algorithms such as `bulk_chunked` and `bulk_unchunked`.
100100
struct __parallel_scheduler_domain : stdexec::default_domain {
101-
/// Schedules new bulk chunked work.
101+
template <__bulk_chunked_or_unchunked _Sender>
102+
auto transform_sender(_Sender&& __sndr) const noexcept;
102103
template <__bulk_chunked_or_unchunked _Sender, class _Env>
103104
auto transform_sender(_Sender&& __sndr, const _Env& __env) const noexcept;
104105
};
@@ -706,6 +707,22 @@ namespace exec {
706707
using sender_concept = stdexec::sender_t;
707708
};
708709

710+
template <__bulk_chunked_or_unchunked _Sender>
711+
auto __parallel_scheduler_domain::transform_sender(_Sender&& __sndr)
712+
const noexcept {
713+
if constexpr (stdexec::__completes_on<_Sender, parallel_scheduler>) {
714+
auto __sched = stdexec::get_completion_scheduler<stdexec::set_value_t>(
715+
stdexec::get_env(__sndr));
716+
return stdexec::__sexpr_apply(
717+
static_cast<_Sender&&>(__sndr), __transform_parallel_bulk_sender{__sched});
718+
} else {
719+
static_assert(
720+
stdexec::__completes_on<_Sender, parallel_scheduler>,
721+
"No parallel_scheduler instance can be found in the sender's "
722+
"environment on which to schedule bulk work.");
723+
return __not_a_sender<stdexec::__name_of<_Sender>>();
724+
}
725+
}
709726
template <__bulk_chunked_or_unchunked _Sender, class _Env>
710727
auto __parallel_scheduler_domain::transform_sender(_Sender&& __sndr, const _Env& __env)
711728
const noexcept {

0 commit comments

Comments
 (0)