41 template<
typename Seq,
typename Rec>
58 template<
typename... Args>
62 util::forward<Args>(args)...);
69 storage.template emplace<meta::DecayedTuple<SetError, E>>(
set_error, util::forward<E>(error));
80 auto was_first = [&] {
99 [&](
auto tag,
auto&&... values) {
108 util::forward<decltype(tuple)>(tuple));
115 auto decayed_error = util::forward<E>(error);
127 template<
typename Seq,
typename Rec>
130 template<
typename Seq,
typename Rec,
typename Next,
typename R>
137 template<
typename Seq,
typename Rec,
typename Next,
typename R>
140 template<
typename Seq,
typename Rec,
typename Next,
typename R>
149 : m_next_data(next_data), m_data(
data) {}
151 auto base() const& -> R const& {
return m_next_data->next_receiver; }
152 auto base() && -> R&& {
return util::move(m_next_data->next_receiver); }
155 template<
typename... Args>
157 m_data->complete_inner_value(util::forward<Args>(values)...);
163 m_data->complete_inner_error(util::forward<E>(error));
168 m_data->complete_inner_stopped();
177 template<
typename Seq,
typename Rec,
typename Next,
typename R>
180 template<
typename Seq,
typename Rec,
typename Next,
typename R>
187 : m_next_data(
util::move(receiver))
189 , m_operation(
connect(
util::forward<Next>(next_sender),
201 template<
typename Seq,
typename Rec,
typename Next,
typename R>
204 template<
typename Seq,
typename Rec,
typename Next>
211 [[no_unique_address]] Next
next;
214 template<concepts::ReceiverOf<CompletionSignatures> R>
223 template<
typename Seq,
typename Rec,
typename Next>
226 template<
typename Seq,
typename Rec>
237 self.data->complete_outer_error(util::forward<E>(error));
242 template<concepts::Sender Next>
251 template<
typename Seq,
typename Rec>
254 template<
typename Seq,
typename Rec>
261 : m_data(
util::move(receiver))
272 template<
typename Seq,
typename Rec>
275 template<
typename... Values>
281 template<
typename Seq,
typename Env>
285 template<
typename Seq>
292 template<concepts::RemoveCVRefSameAs<Type> Self,
typename Env>
297 template<concepts::RemoveCVRefSameAs<Type> Self,
typename Rec>
301 util::move(receiver));
308 template<
typename Seq>
312 template<concepts::Sender Seq>
316 "first_value() customizations must return a Sender");
Definition variant_forward_declaration.h:6
#define DI_IMMOVABLE_NO_UNIQUE_ADDRESS
Definition compiler.h:15
Checks if Send is a sequence that is always lockstep.
Definition is_always_lockstep_sequence.h:63
Definition receiver_of.h:25
Definition tag_invoke.h:33
Definition first_value.h:40
meta::Type< OperationStateT< Seq, Rec > > OperationState
Definition first_value.h:273
meta::Type< ReceiverT< Seq, Rec > > Receiver
Definition first_value.h:252
meta::Type< DataT< Seq, Rec > > Data
Definition first_value.h:128
meta::Type< NextSenderT< Seq, Rec, meta::RemoveCVRef< Next > > > NextSender
Definition first_value.h:224
meta::Type< NextReceiverT< Seq, Rec, Next, R > > NextReceiver
Definition first_value.h:178
CompletionSignatures< SetValue(meta::Decay< Values > &&...)> SigSetValue
Definition first_value.h:276
CompletionSignatures< SetError(meta::Decay< E > &&)> SigSetError
Definition first_value.h:279
meta::Type< NextOperationStateT< Seq, Rec, Next, R > > NextOperationState
Definition first_value.h:202
meta::Type< SenderT< meta::RemoveCVRef< Seq > > > Sender
Definition first_value.h:309
meta::Type< NextDataT< Seq, Rec, Next, R > > NextData
Definition first_value.h:138
meta::MakeCompletionSignatures< Seq, MakeEnv< Env >, CompletionSignatures< SetStopped()>, SigSetValue, SigSetError > Sigs
Definition first_value.h:282
constexpr auto set_error
Definition set_error.h:14
constexpr auto start
Definition start.h:20
constexpr auto first_value
Transform a sequence into a sender of its first value.
Definition first_value.h:337
constexpr auto make_env
Create an environment with overrides for queries.
Definition make_env.h:147
meta::Type< receiver_interface_ns::ReceiverAdaptor< Self, Base > > ReceiverAdaptor
Definition receiver_adaptor.h:236
constexpr auto set_stopped
Definition set_stopped.h:14
constexpr auto subscribe
Subscribe a receiver to a sequence.
Definition sequence_sender.h:234
constexpr auto next
Get the next value of a async range in a coroutine.
Definition async_range.h:52
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
@ Relaxed
Definition memory_order.h:7
@ AcquireRelease
Definition memory_order.h:11
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
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 tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto sequence
Definition sequence.h:34
constexpr auto data
Definition data.h:51
Defines the sequence sender concepts and related CPOs.
Definition set_stopped.h:6
Definition first_value.h:43
void complete_outer_stopped()
Definition first_value.h:119
void complete_inner_value(Args &&... args)
Definition first_value.h:59
meta::PushFront< meta::AsList< meta::CompletionSignaturesOf< Seq, Env > >, SetStopped()> Sigs
Definition first_value.h:47
Storage storage
Definition first_value.h:122
meta::Transform< Sigs, meta::Compose< meta::Quote< meta::List >, meta::Quote< meta::LanguageFunctionReturn > > > Tags
Definition first_value.h:48
meta::EnvOf< Rec > Env
Definition first_value.h:46
void complete_inner_error(E &&error)
Definition first_value.h:67
Rec receiver
Definition first_value.h:121
meta::AsTemplate< vocab::Variant, meta::Unique< meta::Transform< meta::Zip< Tags, DecayedArgs >, meta::Compose< meta::Uncurry< meta::Quote< meta::DecayedTuple > >, meta::Quote< meta::Join > > > > > Storage
Definition first_value.h:52
void complete_outer_error(E &&error)
Definition first_value.h:114
sync::Atomic< bool > got_first_value
Definition first_value.h:123
void complete_inner_stopped()
Definition first_value.h:73
void complete_inner(concepts::Invocable<> auto &&emplace)
Definition first_value.h:79
static constexpr bool is_lockstep
Definition first_value.h:44
meta::Transform< Sigs, meta::Quote< meta::AsList > > DecayedArgs
Definition first_value.h:51
void complete_outer_value()
Definition first_value.h:95
Definition first_value.h:42
Definition first_value.h:311
auto operator()(Seq &&sequence) const
Definition first_value.h:313
Definition first_value.h:132
R next_receiver
Definition first_value.h:133
Definition first_value.h:131
friend void tag_invoke(types::Tag< start >, Type &self)
Definition first_value.h:193
Type(Data< Seq, Rec > *data, Next &&next_sender, R receiver)
Definition first_value.h:186
meta::ConnectResult< Next, NextReceiver< Seq, Rec, Next, R > > Op
Definition first_value.h:184
Definition first_value.h:181
auto base() &&-> R &&
Definition first_value.h:152
auto base() const &-> R const &
Definition first_value.h:151
Type(NextData< Seq, Rec, Next, R > *next_data, Data< Seq, Rec > *data)
Definition first_value.h:148
Definition first_value.h:141
Definition first_value.h:206
friend auto tag_invoke(Tag< connect >, Type &&self, R receiver)
Definition first_value.h:215
types::CompletionSignatures< SetStopped()> CompletionSignatures
Definition first_value.h:209
Next next
Definition first_value.h:211
Data< Seq, Rec > * data
Definition first_value.h:212
void is_sender
Definition first_value.h:207
friend auto tag_invoke(types::Tag< get_env >, Type const &self)
Definition first_value.h:219
Definition first_value.h:205
friend void tag_invoke(types::Tag< start >, Type &self)
Definition first_value.h:265
Type(Seq &&sequence, Rec receiver)
Definition first_value.h:260
meta::SubscribeResult< Seq, Receiver< Seq, Rec > > Op
Definition first_value.h:258
Definition first_value.h:255
Definition first_value.h:228
friend auto tag_invoke(Tag< set_next >, Type &self, Next &&next)
Definition first_value.h:243
friend void tag_invoke(Tag< set_error >, Type &&self, E &&error)
Definition first_value.h:236
Data< Seq, Rec > * data
Definition first_value.h:231
friend void tag_invoke(Tag< set_stopped >, Type &&self)
Definition first_value.h:240
void is_receiver
Definition first_value.h:229
friend void tag_invoke(Tag< set_value >, Type &&self)
Definition first_value.h:233
friend auto tag_invoke(Tag< get_env >, Type const &self)
Definition first_value.h:247
Definition first_value.h:227
Definition first_value.h:287
Seq sequence
Definition first_value.h:290
void is_sender
Definition first_value.h:288
friend auto tag_invoke(Tag< get_completion_signatures >, Self &&, Env &&) -> Sigs< meta::Like< Self, Seq >, Env >
Definition first_value.h:293
friend auto tag_invoke(Tag< connect >, Self &&self, Rec receiver)
Definition first_value.h:299
friend auto tag_invoke(Tag< get_env >, Type const &self)
Definition first_value.h:304
Definition first_value.h:286
Definition completion_signuatures.h:7