1#ifndef KOKKOS_EXECUTION_EXECUTION_SPACE_SCHEDULE_FROM_HPP
2#define KOKKOS_EXECUTION_EXECUTION_SPACE_SCHEDULE_FROM_HPP
21template <stdexec::scheduler Schd, stdexec::receiver Rcvr>
29 stdexec::set_value(std::move(
rcvr));
35 const bool requires_synchronization = [&]() {
36 if constexpr (stdexec::__queryable_with<stdexec::env_of_t<Rcvr>,
Impl::get_exec_t>) {
39 typename std::remove_cvref_t<
42 typename Schd::execution_space
49 if (requires_synchronization) {
50 schd.state->exec.fence(
51 std::format(
"{}: schedule_from", Kokkos::Impl::TypeInfo<typename Schd::execution_space>::name()));
53 stdexec::set_value(std::move(
rcvr));
56 template <
typename Error>
58 stdexec::set_error(std::move(
rcvr), std::forward<Error>(err));
62 stdexec::set_stopped(std::move(
rcvr));
68template <
typename ExecEnvPolicy,
typename Rcvr>
75 stdexec::set_value(std::move(
rcvr));
78 template <
typename Error>
80 stdexec::set_error(std::move(
rcvr), std::forward<Error>(err));
84 stdexec::set_stopped(std::move(
rcvr));
97template <stdexec::scheduler Schd, stdexec::sender Sndr>
103 template <
typename Rcvr>
106 template <stdexec::receiver Rcvr>
107 stdexec::operation_state
auto connect(Rcvr rcvr) &&
noexcept(
108 std::is_nothrow_constructible_v<rcvr_t<Rcvr>, Schd&&, Rcvr&&>
109 && stdexec::__nothrow_connectable<Sndr&&, rcvr_t<Rcvr>>) {
110 return stdexec::connect(
126 template <
typename Rcvr>
129 template <stdexec::receiver Rcvr>
130 stdexec::operation_state
auto connect(Rcvr rcvr) &&
noexcept(
131 std::is_nothrow_constructible_v<rcvr_t<Rcvr>, Rcvr&&> && stdexec::__nothrow_connectable<Sndr&&, rcvr_t<Rcvr>>) {
132 return stdexec::connect(std::forward<Sndr>(
sndr),
rcvr_t<Rcvr>{std::move(rcvr)});
142 template <
typename Sndr,
typename Env>
145 template <
typename Env, execution_space_completing_sender<Env> Sndr>
146 auto operator()(
const Env& env, stdexec::schedule_from_t, stdexec::__ignore, Sndr&& sndr)
const
147 noexcept(std::is_nothrow_constructible_v<
154 .schd = stdexec::get_completion_scheduler<stdexec::set_value_t>(stdexec::get_env(sndr), env),
155 .sndr = std::forward<Sndr>(sndr)};
158 template <
typename Env,
typename Sndr>
159 requires(!stdexec::__has_completion_scheduler_for<stdexec::set_value_t, Sndr, Env>)
160 auto operator()(
const Env&, stdexec::schedule_from_t, stdexec::__ignore, Sndr&& sndr)
const
#define KOKKOS_EXECUTION_IMPL_FORWARDING_ATTRIBUTES_GET_ENV(_type_, _obj_)
#define KOKKOS_EXECUTION_COMPL_SIGS_KEEP(_sndr_type_)
#define KOKKOS_EXECUTION_FORWARDING_GET_ENV(_type_, _obj_)
Retrieve the environment of _obj_ (with forwarding). // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)...
decltype(extend_env< ExecEnvPolicy >(std::declval< Env >())) extend_env_t
constexpr auto extend_env(Env &&env) noexcept
constexpr get_exec_t get_exec
std::invoke_result_t< stdexec::get_completion_scheduler_t< Tag >, stdexec::env_of_t< Sndr >, Env... > completion_scheduler_of_t
Retrieve the completion scheduler for a given completion tag.
void set_stopped() &&noexcept
void set_value() &&noexcept
void set_error(Error &&err) &&noexcept
void continues_after() &&noexcept
Impl::DeferredCompletionReceiverTag receiver_concept
stdexec::receiver_tag receiver_concept
void set_value() &&noexcept
constexpr auto get_env() const noexcept -> extend_env_t< ExecEnvPolicy, stdexec::env_of_t< Rcvr > >
void set_error(Error &&err) &&noexcept
void set_stopped() &&noexcept
ScheduleFromReceiver< WithDelegatedSyncPolicy, WithoutExecEnvPolicy, Schd, Rcvr > rcvr_t
stdexec::operation_state auto connect(Rcvr rcvr) &&noexcept(std::is_nothrow_constructible_v< rcvr_t< Rcvr >, Schd &&, Rcvr && > &&stdexec::__nothrow_connectable< Sndr &&, rcvr_t< Rcvr > >)
stdexec::sender_tag sender_concept
ScheduleFromReceiver< WithoutDelegatedSyncPolicy, exec_env_policy_t< stdexec::env_of_t< Rcvr > >, Rcvr > rcvr_t
stdexec::operation_state auto connect(Rcvr rcvr) &&noexcept(std::is_nothrow_constructible_v< rcvr_t< Rcvr >, Rcvr && > &&stdexec::__nothrow_connectable< Sndr &&, rcvr_t< Rcvr > >)
stdexec::sender_tag sender_concept
Kokkos::DefaultExecutionSpace execution_space