21 template<
typename CPO,
typename Completions>
26 template<
typename CPO,
typename Fun,
typename Completions>
33 template<
typename CPO,
typename Rec,
typename Fun,
typename Completions>
47 [[no_unique_address]] Fun
f;
48 [[no_unique_address]] Rec
out_r;
49 [[no_unique_address]] ArgsStorage
args {};
52 template<
typename... Args>
56 auto& decayed_args = this->
args.template emplace<Tuple>(util::forward<Args>(
args)...);
70 template<concepts::OneOf<SetValue, SetError, SetStopped> CPO, concepts::Receiver Rec, concepts::MovableValue Fun,
71 concepts::InstanceOf<CompletionSignatures> Completions>
74 template<
typename CPO,
typename Rec,
typename Fun,
typename Completions>
82 template<concepts::SameAs<CPO> Tag,
typename... Args>
88 self.data->phase2(util::forward<Args>(args)...);
91 template<concepts::OneOf<SetValue, SetError, SetStopped> Tag,
typename... Args>
95 return tag(util::move(self.data->out_r), util::forward<Args>(args)...);
104 template<concepts::OneOf<SetValue, SetError, SetStopped> CPO, concepts::Receiver Rec, concepts::MovableValue Fun,
105 concepts::InstanceOf<CompletionSignatures> Completions>
108 template<
typename CPO,
typename Send,
typename Rec,
typename Fun>
115 explicit Type(Fun f, Rec out_r, Send&& sender)
116 : m_data(
util::move(f),
util::move(out_r))
118 Receiver<CPO, Rec, Fun, Completions> { util::addressof(m_data) })) {}
128 template<concepts::OneOf<SetValue, SetError, SetStopped> CPO, concepts::Sender Send, concepts::Receiver Rec,
129 concepts::MovableValue Fun>
132 template<
typename CPO,
typename Send,
typename Fun>
142 template<concepts::DecaysTo<Type> Self,
typename Env>
143 using BaseCompletionSignatures =
147 template<concepts::DecaysTo<Type> Self,
typename Env>
148 using InvokeCompletionSignatures =
meta::Join<
153 template<concepts::DecaysTo<Type> Self,
typename Env>
155 CompletionSignatures,
158 template<concepts::DecaysTo<Type> Self,
typename Env>
160 -> CompletionSignatures<Self, MakeEnv<Env>> {
164 template<concepts::DecaysTo<Type> Self, concepts::Receiver Rec,
165 concepts::SameAs<types::Tag<connect>> Tag = types::Tag<connect>>
173 util::move(receiver),
183 template<concepts::OneOf<SetValue, SetError, SetStopped> CPO, concepts::Sender Send, concepts::MovableValue Fun>
186 template<concepts::OneOf<SetValue, SetError, SetStopped> CPO>
188 template<concepts::Sender Send, concepts::MovableValue Fun>
190 if constexpr (
requires {
192 util::forward<Send>(sender), util::forward<Fun>(
function));
195 util::forward<Send>(sender), util::forward<Fun>(
function));
196 }
else if constexpr (
requires {
Definition defer_construct.h:8
Definition tuple_forward_declaration.h:5
#define DI_IMMOVABLE_NO_UNIQUE_ADDRESS
Definition compiler.h:15
Definition sender_to.h:11
meta::Type< ReceiverT< CPO, Rec, Fun, Completions > > Receiver
Definition let.h:106
meta::Type< OperationStateT< CPO, Send, Rec, Fun > > OperationState
Definition let.h:130
meta::Type< SenderT< CPO, meta::RemoveCVRef< Send >, meta::Decay< Fun > > > Sender
Definition let.h:184
meta::Unique< meta::Transform< meta::Filter< meta::AsList< Completions >, meta::IsFunctionTo< CPO > >, meta::Compose< meta::Uncurry< meta::Quote< meta::DecayedTuple > >, meta::Quote< meta::AsList > > > > ArgTypes
Definition let.h:22
meta::Type< DataT< CPO, Rec, Fun, Completions > > Data
Definition let.h:72
meta::Transform< ArgTypes< CPO, Completions >, meta::Compose< meta::Uncurry< meta::BindFront< meta::Quote< meta::InvokeResult >, Fun > >, meta::BindBack< meta::Quote< meta::Transform >, meta::Quote< meta::AddLValueReference > >, meta::Quote< meta::AsList > > > SenderTypes
Definition let.h:27
constexpr auto let_value
Definition let.h:208
constexpr auto start
Definition start.h:20
constexpr auto make_env
Create an environment with overrides for queries.
Definition make_env.h:147
constexpr auto let_error
Definition let.h:209
constexpr auto get_completion_scheduler
Definition get_completion_scheduler.h:19
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 let_stopped
Definition let.h:210
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto curry_back
Definition curry_back.h:141
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
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
OpStateStorage op_state3
Definition let.h:50
ArgsStorage args
Definition let.h:49
Type(Fun f_, Rec out_r_)
Definition let.h:45
void phase2(Args &&... args)
Definition let.h:54
Rec out_r
Definition let.h:48
auto operator()(Send &&sender, Fun &&function) const -> concepts::Sender auto
Definition let.h:189
friend void tag_invoke(types::Tag< start >, Type &self)
Definition let.h:121
Type(Fun f, Rec out_r, Send &&sender)
Definition let.h:115
void is_receiver
Definition let.h:77
Data< CPO, Rec, Fun, Completions > * data
Definition let.h:79
friend void tag_invoke(Tag tag, Type &&self, Args &&... args)
Definition let.h:92
constexpr friend auto tag_invoke(types::Tag< get_env >, Type const &self)
Definition let.h:98
friend void tag_invoke(Tag, Type &&self, Args &&... args)
Definition let.h:83
Fun function
Definition let.h:139
friend auto tag_invoke(Tag, Self &&self, Rec receiver)
Definition let.h:171
constexpr friend auto tag_invoke(types::Tag< get_env >, Type const &self)
Definition let.h:177
friend auto tag_invoke(types::Tag< get_completion_signatures >, Self &&, Env &&) -> CompletionSignatures< Self, MakeEnv< Env > >
Definition let.h:159
Send sender
Definition let.h:138
void is_sender
Definition let.h:136