@@ -67,9 +67,10 @@ struct op_state_base<Rcvr, Ops> {
6767 auto clear_stop_cb () -> void {}
6868};
6969
70- template <typename Name, typename Rcvr, typename ... Args>
71- struct op_state final : op_state_base<Rcvr, op_state<Name, Rcvr, Args...>>,
72- trigger_task<Args...> {
70+ template <typename Name, typename Rcvr, typename QueuePolicy, typename ... Args>
71+ struct op_state final
72+ : op_state_base<Rcvr, op_state<Name, Rcvr, QueuePolicy, Args...>>,
73+ trigger_task<Args...> {
7374 template <stdx::same_as_unqualified<Rcvr> R>
7475 // NOLINTNEXTLINE(bugprone-forwarding-reference-overload)
7576 constexpr explicit (true ) op_state(R &&r) : rcvr{std::forward<R>(r)} {}
@@ -93,7 +94,7 @@ struct op_state final : op_state_base<Rcvr, op_state<Name, Rcvr, Args...>>,
9394 complete_stopped ();
9495 return ;
9596 }
96- triggers<Name, Args...>.enqueue (*this );
97+ triggers<Name, Args...>.template enqueue <QueuePolicy> (*this );
9798 this ->emplace_stop_cb ();
9899 }
99100
@@ -111,7 +112,8 @@ struct op_state final : op_state_base<Rcvr, op_state<Name, Rcvr, Args...>>,
111112 [[no_unique_address]] Rcvr rcvr;
112113};
113114
114- template <typename S, typename Name, typename ... Args> class scheduler {
115+ template <typename S, typename Name, typename QueuePolicy, typename ... Args>
116+ class scheduler {
115117 struct sender {
116118 using is_sender = void ;
117119
@@ -127,7 +129,8 @@ template <typename S, typename Name, typename... Args> class scheduler {
127129 template <receiver R>
128130 [[nodiscard]] constexpr auto connect (R &&r) const {
129131 check_connect<sender, R>();
130- return trigger_mgr::op_state<Name, std::remove_cvref_t <R>, Args...>{
132+ return trigger_mgr::op_state<Name, std::remove_cvref_t <R>,
133+ QueuePolicy, Args...>{
131134 std::forward<R>(r)};
132135 }
133136 };
@@ -140,6 +143,7 @@ template <typename S, typename Name, typename... Args> class scheduler {
140143};
141144} // namespace trigger_mgr
142145
146+ namespace detail {
143147template <stdx::ct_string Name, typename ... Args>
144148class trigger_scheduler
145149 : public trigger_mgr::scheduler<trigger_scheduler<Name, Args...>,
@@ -148,6 +152,15 @@ class trigger_scheduler
148152 trigger_scheduler)
149153 -> bool = default ;
150154};
155+ } // namespace detail
156+
157+ template <stdx::ct_string Name, typename ... Args>
158+ using trigger_scheduler =
159+ detail::trigger_scheduler<Name, trigger_mgr::queue_at_back, Args...>;
160+
161+ template <stdx::ct_string Name, typename ... Args>
162+ using urgent_trigger_scheduler =
163+ detail::trigger_scheduler<Name, trigger_mgr::queue_at_front, Args...>;
151164
152165struct trigger_scheduler_sender_t ;
153166
0 commit comments