kokkos-execution 0.0.1
Loading...
Searching...
No Matches
check_completion_scheduler_type.hpp
Go to the documentation of this file.
1#ifndef KOKKOS_EXECUTION_TESTS_UTILS_CHECK_COMPLETION_SCHEDULER_TYPE_HPP
2#define KOKKOS_EXECUTION_TESTS_UTILS_CHECK_COMPLETION_SCHEDULER_TYPE_HPP
3
5
11
13
19
20namespace Tests::Utils {
21
22template <stdexec::sender Sndr, typename Tag, stdexec::scheduler Schd>
24
25template <typename Tag, stdexec::scheduler Schd>
27 [[nodiscard]]
28 constexpr auto operator()() const noexcept {
29 return stdexec::__closure(*this);
30 }
31
32 template <stdexec::sender Sndr>
33 [[nodiscard]]
34 constexpr auto operator()(Sndr&& sndr) const {
35 return CheckCompletionSchedulerTypeSender<Sndr, Tag, Schd>{std::forward<Sndr>(sndr)};
36 }
37};
38
39template <stdexec::sender Sndr, typename Tag, stdexec::scheduler Schd>
41 using sender_concept = stdexec::sender_tag;
42
43 Sndr sndr; // NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
44
46
47 template <stdexec::__decays_to<CheckCompletionSchedulerTypeSender> Self, stdexec::receiver Rcvr>
48 [[nodiscard]]
49 constexpr STDEXEC_EXPLICIT_THIS_BEGIN(
50 auto connect)(this Self&& self, Rcvr rcvr) // NOLINT(cppcoreguidelines-missing-std-forward)
51 noexcept(stdexec::__nothrow_connectable<KOKKOS_EXECUTION_IMPL_MEMBER_CVREF_T(Self, sndr), Rcvr&&>)
52 -> stdexec::connect_result_t<KOKKOS_EXECUTION_IMPL_MEMBER_CVREF_T(Self, sndr), Rcvr&&> {
54 return stdexec::connect(std::forward<Self>(self).sndr, std::move(rcvr));
55 }
56 STDEXEC_EXPLICIT_THIS_END(connect)
57
58 template <stdexec::receiver Rcvr>
59 static consteval bool check_completion_scheduler_type() {
62 static_assert(
63 std::same_as<std::remove_cvref_t<schd_t>, Schd>,
64 "Scheduler type mismatch: completion scheduler type doesn't match expected type.");
65 return true;
66 } else {
67 static_assert(sizeof(Rcvr) == 0, "No completion scheduler found.");
68 return false;
69 }
70 }
71
73};
74
75template <typename Tag, stdexec::scheduler Schd>
77
78} // namespace Tests::Utils
79
80#endif // KOKKOS_EXECUTION_TESTS_UTILS_CHECK_COMPLETION_SCHEDULER_TYPE_HPP
#define KOKKOS_EXECUTION_COMPL_SIGS_KEEP(_decayed_self_type_, _sndr_type_)
#define KOKKOS_EXECUTION_IMPL_FORWARDING_ATTRIBUTES_GET_ENV(_type_, _obj_)
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.
constexpr check_completion_scheduler_type_t< Tag, Schd > check_completion_scheduler_type
constexpr auto connect(this Self &&self, Rcvr rcvr) noexcept(stdexec::__nothrow_connectable< decltype((std::declval< Self >().sndr)), Rcvr && >) -> stdexec::connect_result_t< decltype((std::declval< Self >().sndr)), Rcvr && >
#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...