14 template<
typename Rec,
typename Sched,
typename Completions>
19 template<concepts::Receiver Rec, concepts::Scheduler Sched, concepts::InstanceOf<CompletionSignatures> Completions>
22 template<
typename Rec,
typename Sched,
typename Completions>
41 [[no_unique_address]] Sched
sch;
42 [[no_unique_address]] Rec
out_r;
43 [[no_unique_address]] ArgsStorage
args {};
46 template<concepts::OneOf<SetValue, SetError, SetStopped> Tag, concepts::DecayConstructible... Args,
47 typename Tup = meta::DecayedTuple<Tag, Args...>>
51 args.template emplace<Tup>(tag, util::forward<Args>(values)...);
63 template<concepts::Receiver Rec, concepts::Scheduler Sched, concepts::InstanceOf<CompletionSignatures> Completions>
66 template<
typename Rec,
typename Sched,
typename Completions>
74 auto base() const& -> Rec const& {
return m_data->out_r; }
75 auto base() && -> Rec&& {
return util::move(m_data->out_r); }
80 [&]<
typename T>(T&& value) {
82 [&]<
typename... Args>(
auto tag, Args&&... args) {
86 tag(util::move(m_data->out_r), util::forward<Args>(args)...);
89 util::forward<T>(value));
91 util::move(m_data->args));
97 template<
typename Rec,
typename Sched,
typename Completions>
106 auto base() const& -> Rec const& {
return m_data->out_r; }
107 auto base() && -> Rec&& {
return util::move(m_data->out_r); }
110 template<
typename... Args>
115 return m_data->phase2(
SetValue {}, util::forward<Args>(args)...);
118 template<
typename Error>
123 return m_data->phase2(SetError {}, util::forward<Error>(error));
128 }) {
return m_data->phase2(SetStopped {}); }
134 template<concepts::Receiver Rec, concepts::Scheduler Sched, concepts::InstanceOf<CompletionSignatures> Completions>
137 template<
typename Send,
typename Rec,
typename Sched>
147 explicit Type(Sched scheduler, Rec receiver, S&& sender)
148 : m_data(
util::move(scheduler),
util::move(receiver))
150 Receiver<Rec, Sched, Completions> { util::addressof(m_data) })) {}
160 template<concepts::Sender Send, concepts::Receiver Rec, concepts::Scheduler Sched>
163 template<
typename Send,
typename Sched>
173 template<concepts::DecaysTo<Type> Self,
typename Env>
182 template<concepts::DecaysTo<Type> Self,
typename Rec>
197 SenderEnv sender_env;
199 template<concepts::OneOf<GetCompletionScheduler<SetValue>, GetCompletionScheduler<SetStopped>> Tag>
201 return self.scheduler;
207 constexpr friend auto tag_invoke(
Tag tag, Env
const& self, Args&&... args)
209 return tag(self.sender_env, util::forward<Args>(args)...);
219 template<concepts::Sender Send, concepts::Scheduler Sched>
223 template<concepts::Scheduler Sched, concepts::Sender Send>
226 return function::tag_invoke(*
this, util::forward<Sched>(scheduler), util::forward<Send>(sender));
229 util::forward<Sched>(scheduler) };
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition defer_construct.h:8
Definition optional_forward_declaration.h:5
#define DI_IMMOVABLE_NO_UNIQUE_ADDRESS
Definition compiler.h:15
Definition forwarding_query.h:7
Definition receiver_of.h:25
Definition sender_to.h:11
Definition tag_invoke.h:33
Definition schedule_from.h:13
meta::Type< ReceiverT< Rec, Sched, Completions > > Receiver
Definition schedule_from.h:135
meta::Type< OperationStateT< Send, Rec, Sched > > OperationState
Definition schedule_from.h:161
meta::Type< SenderT< Send, Sched > > Sender
Definition schedule_from.h:220
meta::Type< ScheduleReceiverT< Rec, Sched, Completions > > ScheduleReceiver
Definition schedule_from.h:20
meta::Type< DataT< Rec, Sched, Completions > > Data
Definition schedule_from.h:64
constexpr auto set_error
Definition set_error.h:14
constexpr auto schedule
Definition schedule.h:17
constexpr auto start
Definition start.h:20
meta::Type< receiver_interface_ns::ReceiverAdaptor< Self, Base > > ReceiverAdaptor
Definition receiver_adaptor.h:236
constexpr auto set_stopped
Definition set_stopped.h:14
decltype(make_env(util::declval< BaseEnv >(), util::declval< Withs >()...)) MakeEnv
Represent an environment with overrides for queries.
Definition make_env.h:189
constexpr auto get_env
Definition get_env.h:27
constexpr auto connect
Definition connect.h:42
constexpr auto set_value
Definition set_value.h:14
constexpr auto schedule_from
Definition schedule_from.h:235
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
constexpr auto forward_like(U &&value) -> decltype(auto)
Definition forward_like.h:8
StatusCode< Erased< long > > Error
Definition error.h:8
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto apply(F &&f, Tup &&tuple) -> decltype(detail::apply_impl(meta::MakeIndexSequence< meta::TupleSize< Tup > > {}, util::forward< F >(f), util::forward< Tup >(tuple)))
Definition apply.h:22
constexpr auto visit(Vis &&visitor, Vars &&... variants) -> R
Definition visit.h:39
constexpr auto data
Definition data.h:51
Definition get_completion_scheduler.h:10
Optional< OpState3 > op_state3
Definition schedule_from.h:44
Rec out_r
Definition schedule_from.h:42
Type(Sched sch_, Rec out_r_)
Definition schedule_from.h:39
void phase2(Tag tag, Args &&... values)
Definition schedule_from.h:50
ArgsStorage args
Definition schedule_from.h:43
Sched sch
Definition schedule_from.h:41
Definition schedule_from.h:23
Definition schedule_from.h:222
auto operator()(Sched &&scheduler, Send &&sender) const -> concepts::Sender auto
Definition schedule_from.h:224
Type(Sched scheduler, Rec receiver, S &&sender)
Definition schedule_from.h:147
friend void tag_invoke(types::Tag< execution::start >, Type &self)
Definition schedule_from.h:153
Definition schedule_from.h:138
ReceiverAdaptor< Type > Base
Definition schedule_from.h:100
Type(Data< Rec, Sched, Completions > *data)
Definition schedule_from.h:104
auto base() &&-> Rec &&
Definition schedule_from.h:107
auto base() const &-> Rec const &
Definition schedule_from.h:106
Definition schedule_from.h:98
Definition schedule_from.h:15
auto base() const &-> Rec const &
Definition schedule_from.h:74
auto base() &&-> Rec &&
Definition schedule_from.h:75
ReceiverAdaptor< Type > Base
Definition schedule_from.h:68
Type(Data< Rec, Sched, Completions > *data)
Definition schedule_from.h:72
Definition schedule_from.h:165
Send sender
Definition schedule_from.h:169
Sched scheduler
Definition schedule_from.h:170
void is_sender
Definition schedule_from.h:167
friend auto tag_invoke(types::Tag< get_env >, Type const &self)
Definition schedule_from.h:213
friend auto tag_invoke(types::Tag< get_completion_signatures >, Self &&, Env &&) -> meta::MakeCompletionSignatures< meta::Like< Self, Send >, MakeEnv< Env >, meta::MakeCompletionSignatures< meta::ScheduleResult< Sched >, MakeEnv< Env >, CompletionSignatures<>, meta::TypeConstant< CompletionSignatures<> >::template Invoke > >
Definition schedule_from.h:174
friend auto tag_invoke(types::Tag< connect >, Self &&self, Rec receiver)
Definition schedule_from.h:188
Definition schedule_from.h:164
Definition completion_signuatures.h:7