1#ifndef KOKKOS_EXECUTION_EXECUTION_SPACE_SCHEDULE_FROM_HPP
2#define KOKKOS_EXECUTION_EXECUTION_SPACE_SCHEDULE_FROM_HPP
20template <
typename ParentOp,
typename Env = stdexec::env_of_t<ParentOp>>
30template <stdexec::receiver Rcvr>
37template <stdexec::sender Sndr, stdexec::receiver Rcvr>
62 noexcept(std::is_nothrow_constructible_v<base_t, Rcvr&&> && stdexec::__nothrow_connectable<Sndr&&, rcvr_t>)
68 stdexec::set_value(std::move(this->
rcvr));
71 template <
typename Error>
72 void complete(stdexec::set_error_t, Error&& error)
noexcept {
73 stdexec::set_error(std::move(this->
rcvr), std::forward<Error>(error));
76 void complete(stdexec::set_stopped_t)
noexcept {
77 stdexec::set_stopped(std::move(this->
rcvr));
83 std::move(this->
rcvr).submitted();
94 stdexec::set_error(std::move(this->
rcvr), std::current_exception());
97 stdexec::set_value(std::move(this->
rcvr));
102 requires stdexec::__queryable_with<inner_opstate_t, Impl::get_exec_t>
112template <stdexec::sender Sndr>
118 template <stdexec::receiver Rcvr>
120 connect(Rcvr rcvr) &&
noexcept(std::is_nothrow_constructible_v<ScheduleFromOpState<Sndr, Rcvr>, Sndr&&, Rcvr&&>)
132 template <
typename Env,
typename Sndr>
133 auto operator()(
const Env&, stdexec::schedule_from_t, stdexec::__ignore, Sndr&&
sndr)
const
135 return {.sndr = std::forward<Sndr>(
sndr)};
#define KOKKOS_EXECUTION_IMPL_FORWARDING_ATTRIBUTES_GET_ENV(_type_, _obj_)
#define KOKKOS_EXECUTION_COMPL_SIGS_KEEP(_decayed_self_type_, _sndr_type_)
Concept for a sender whose completion scheduler is Kokkos::Execution::ExecutionSpaceImpl::Scheduler.
#define KOKKOS_EXECUTION_GET_ENV(_type_, _obj_)
Retrieve the environment of _obj_. // NOLINTNEXTLINE(cppcoreguidelines-macro-usage).
decltype(extend_env_with_exec< ExecEnvPolicy >(std::declval< Env >())) extend_env_with_exec_t
std::conditional_t< stdexec::__queryable_with< Env, Impl::get_exec_t >, WithExecEnvPolicy, WithoutExecEnvPolicy > extend_env_with_exec_policy_t
If Env is queryable with Impl::get_exec_t, use WithExecEnvPolicy.
constexpr auto extend_env_with_exec(Env &&env) noexcept
std::conditional_t< ScheduleFrom::signals_submitted< InnerOp, Rcvr >, Impl::SubmittedPolicy::OrderOnExec, Impl::SyncPolicy::InlineFenceExec > completion_signal_policy_t
constexpr get_exec_t get_exec
typename ExecOf< Args... >::type exec_of_t
consteval std::string_view dispatch_label() noexcept
View the dispatch label as a std::string_view.
ScheduleFromReceiver< ScheduleFromOpState, stdexec::env_of_t< Rcvr > > rcvr_t
void submit() noexcept
Transition to another domain.
Impl::ScheduleFrom::completion_signal_policy_t< inner_opstate_t, Rcvr > completion_signal_policy_t
stdexec::connect_result_t< Sndr, rcvr_t > inner_opstate_t
void complete(stdexec::set_stopped_t) noexcept
inner_opstate_t inner_opstate
void submit() noexcept
Stay in the Kokkos::Execution::ExecutionSpaceImpl::Domain.
Impl::SubmittedOperationStateTag operation_state_concept
ScheduleFromOpStateBase< Rcvr > base_t
constexpr ScheduleFromOpState(Sndr &&sndr, Rcvr rcvr) noexcept(std::is_nothrow_constructible_v< base_t, Rcvr && > &&stdexec::__nothrow_connectable< Sndr &&, rcvr_t >)
void complete(stdexec::set_error_t, Error &&error) noexcept
void complete(stdexec::set_value_t) noexcept
std::conditional_t< execution_space_completing_sender< Sndr, stdexec::__fwd_env_t< stdexec::env_of_t< Rcvr > > >, WithoutExecEnvPolicy, extend_env_with_exec_policy_t< stdexec::env_of_t< Rcvr > > > exec_env_policy_t
constexpr auto query(Impl::get_exec_t) const noexcept -> decltype(auto)
constexpr auto get_env() const noexcept -> extend_env_with_exec_t< exec_env_policy_t, Env >
typename ParentOp::exec_env_policy_t exec_env_policy_t
constexpr auto connect(Rcvr rcvr) &&noexcept(std::is_nothrow_constructible_v< ScheduleFromOpState< Sndr, Rcvr >, Sndr &&, Rcvr && >) -> ScheduleFromOpState< Sndr, Rcvr >
stdexec::sender_tag sender_concept
Receiver for an object parent_op that implements complete.
ScheduleFromOpState * parent_op