kokkos-execution 0.0.1
Loading...
Searching...
No Matches
when_all.hpp
Go to the documentation of this file.
1#ifndef KOKKOS_EXECUTION_EXECUTION_SPACE_WHEN_ALL_HPP
2#define KOKKOS_EXECUTION_EXECUTION_SPACE_WHEN_ALL_HPP
3
5
9
11
12struct when_all_t { };
13
14} // namespace Kokkos::Execution::ExecutionSpaceImpl
15
16namespace stdexec {
17template <>
18struct __sexpr_impl<Kokkos::Execution::ExecutionSpaceImpl::when_all_t> : stdexec::__when_all::__when_all_impl {
19 using base_t = stdexec::__when_all::__when_all_impl;
20
21 template <typename State>
22 using state_env_t = stdexec::env_of_t<decltype(std::declval<const State&>().__rcvr_)>;
23
24 template <typename State>
27
28 template <typename State>
29 using base_env_t = decltype(base_t::__get_env(stdexec::__ignore{}, std::declval<const State&>()));
30
31 template <typename ExecEnvPolicy, typename State>
33
34 template <typename State>
35 struct get_env_impl<Kokkos::Execution::ExecutionSpaceImpl::WithExecEnvPolicy, State> {
37
39 std::declval<base_env_t<State>>(),
40 std::declval<execution_space>()));
41
42 [[nodiscard]]
43 static constexpr auto get_env(const State& state) noexcept -> type {
45 base_t::__get_env(stdexec::__ignore{}, state),
46 Kokkos::Execution::Impl::get_exec(stdexec::get_env(state.__rcvr_)).get());
47 }
48 };
49
50 template <typename State>
51 struct get_env_impl<Kokkos::Execution::ExecutionSpaceImpl::WithoutExecEnvPolicy, State> {
53
54 [[nodiscard]]
55 static constexpr auto get_env(const State& state) noexcept -> type {
56 return base_t::__get_env(stdexec::__ignore{}, state);
57 }
58 };
59
67 static constexpr auto __get_env = // NOLINT(bugprone-reserved-identifier)
68 []<typename State>(stdexec::__ignore, const State& state) noexcept ->
69 typename get_env_impl<state_exec_env_policy_t<State>, State>::type {
70 return get_env_impl<state_exec_env_policy_t<State>, State>::get_env(state);
71 };
72
81 template <typename Self, typename... Envs>
82 static consteval auto __get_completion_signatures() { // NOLINT(bugprone-reserved-identifier)
83 if constexpr (stdexec::__minvocable_q<stdexec::__when_all::__when_all_impl::__completions_t, Self, Envs...>) {
84 return stdexec::__when_all::__when_all_impl::__completions_t<Self, Envs...>{};
85 } else if constexpr (sizeof...(Envs) == 0) {
86 return stdexec::__throw_dependent_sender_error<Self>();
87 }
88 }
89};
90
91} // namespace stdexec
92
94
95template <>
97 template <typename Env, typename... Sndrs>
98 auto operator()(const Env&, stdexec::when_all_t, stdexec::__, Sndrs&&... sndrs) const {
99 return stdexec::__make_sexpr<Kokkos::Execution::ExecutionSpaceImpl::when_all_t>(
100 stdexec::__{}, std::forward<Sndrs>(sndrs)...);
101 }
102};
103
104} // namespace Kokkos::Execution::ExecutionSpaceImpl
105
106#endif // KOKKOS_EXECUTION_EXECUTION_SPACE_WHEN_ALL_HPP
constexpr auto join_env_with_exec(Env &&env, const Exec &exec) noexcept
Unconditionally join exec to env.
Definition env.hpp:15
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.
Definition env.hpp:55
constexpr get_exec_t get_exec
Definition get_exec.hpp:19
typename ExecOf< Args... >::type exec_of_t
Definition get_exec.hpp:37
auto operator()(const Env &, stdexec::when_all_t, stdexec::__, Sndrs &&... sndrs) const
Definition when_all.hpp:98
stdexec::env_of_t< decltype(std::declval< const State & >().__rcvr_)> state_env_t
Definition when_all.hpp:22
decltype(base_t::__get_env(stdexec::__ignore{}, std::declval< const State & >())) base_env_t
Definition when_all.hpp:29
Kokkos::Execution::ExecutionSpaceImpl::extend_env_with_exec_policy_t< state_env_t< State > > state_exec_env_policy_t
Definition when_all.hpp:25
decltype(Kokkos::Execution::ExecutionSpaceImpl::join_env_with_exec( std::declval< base_env_t< State > >(), std::declval< execution_space >())) type
Definition when_all.hpp:38