kokkos-execution 0.0.1
Loading...
Searching...
No Matches
check_rcvr_env_queryable_with.hpp
Go to the documentation of this file.
1#ifndef KOKKOS_EXECUTION_TESTS_UTILS_CHECK_RCVR_ENV_QUERYABLE_WITH_HPP
2#define KOKKOS_EXECUTION_TESTS_UTILS_CHECK_RCVR_ENV_QUERYABLE_WITH_HPP
3
5
10
12
18
19namespace Tests::Utils {
20
21template <bool IsQueryable, stdexec::sender Sndr, typename... Queries>
23
24template <bool IsQueryable, typename... Queries>
26 [[nodiscard]]
27 constexpr auto operator()() const noexcept {
28 return stdexec::__closure(*this);
29 }
30
31 template <stdexec::sender Sndr>
32 [[nodiscard]]
33 constexpr auto operator()(Sndr&& sndr) const {
34 return CheckRcvrEnvQueryableWithSender<IsQueryable, Sndr, Queries...>{std::forward<Sndr>(sndr)};
35 }
36};
37
38template <bool IsQueryable, stdexec::sender Sndr, typename... Queries>
40 using sender_concept = stdexec::sender_tag;
41
42 Sndr sndr; // NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
43
45
46 template <stdexec::__decays_to<CheckRcvrEnvQueryableWithSender> Self, stdexec::receiver Rcvr>
47 [[nodiscard]]
48 constexpr STDEXEC_EXPLICIT_THIS_BEGIN(
49 auto connect)(this Self&& self, Rcvr rcvr) // NOLINT(cppcoreguidelines-missing-std-forward)
50 noexcept(stdexec::__nothrow_connectable<KOKKOS_EXECUTION_IMPL_MEMBER_CVREF_T(Self, sndr), Rcvr&&>)
51 -> stdexec::connect_result_t<KOKKOS_EXECUTION_IMPL_MEMBER_CVREF_T(Self, sndr), Rcvr&&> {
52 static_assert(check_rcvr_env<Rcvr>());
53 return stdexec::connect(std::forward<Self>(self).sndr, std::move(rcvr));
54 }
55 STDEXEC_EXPLICIT_THIS_END(connect)
56
57 template <stdexec::receiver Rcvr>
58 static consteval bool check_rcvr_env() {
59 if constexpr (IsQueryable) {
60 static_assert(
61 (stdexec::__queryable_with<stdexec::env_of_t<Rcvr>, Queries> && ...),
62 "The receiver environment is not queryable with at least one query from the given set of queries.");
63 } else {
64 static_assert(
65 ((!stdexec::__queryable_with<stdexec::env_of_t<Rcvr>, Queries>) && ...),
66 "The receiver environment is queryable with at least one query from the given set of queries.");
67 }
68 return true;
69 }
70
72};
73
74template <typename... Queries>
76
77template <typename... Queries>
79
80} // namespace Tests::Utils
81
82#endif // KOKKOS_EXECUTION_TESTS_UTILS_CHECK_RCVR_ENV_QUERYABLE_WITH_HPP
#define KOKKOS_EXECUTION_IMPL_FORWARDING_ATTRIBUTES_GET_ENV(_type_, _obj_)
#define KOKKOS_EXECUTION_COMPL_SIGS_KEEP(_decayed_self_type_, _sndr_type_)
constexpr check_rcvr_env_queryable_with_t< false, Queries... > check_rcvr_env_not_queryable_with
constexpr check_rcvr_env_queryable_with_t< true, Queries... > check_rcvr_env_queryable_with
#define KOKKOS_EXECUTION_IMPL_MEMBER_CVREF_T(_Self_, _member_)
Yields the type of member _member_ as accessed from expression _Self_, preserving the cv and ref qual...