38 template<
typename Env,
typename... Sends>
47 template<
typename Fun,
typename Env>
49 template<
typename... Values>
53 template<
typename Seq,
typename Fun,
typename Env>
58 template<
typename... Values>
61 template<
typename Seq,
typename Fun,
typename Env>
64 template<concepts::LanguageFunction Sig>
68 template<
typename Fun,
typename Rec>
76 template<concepts::MovableValue Fun, concepts::Receiver Rec>
81 template<
typename... Types>
84 template<
typename Send,
typename Fun,
typename Rec,
typename R>
104 template<
typename Send,
typename Fun,
typename Rec,
typename R>
107 template<
typename Send,
typename Fun,
typename Rec,
typename R>
115 auto base() const& -> R const& {
return m_data->receiver; }
116 auto base() && -> R&& {
return di::move(m_data->receiver); }
118 template<
typename... Values>
121 m_data->values.template emplace<Tuple>(
SetValue {}, di::forward<Values>(values)...);
123 m_data->on_receive_value();
126 template<
typename Error>
129 m_data->values.template emplace<Tuple>(
SetError {}, di::forward<Error>(error));
131 m_data->on_receive_value();
136 m_data->values.template emplace<Tuple>(
SetStopped {});
138 m_data->on_receive_value();
146 template<
typename Send,
typename Fun,
typename Rec,
typename R>
149 template<
typename Send,
typename Fun,
typename Rec,
typename R>
159 auto base() const& -> R const& {
return m_data->receiver; }
160 auto base() && -> R&& {
return di::move(m_data->receiver); }
162 void set_value(
bool accept) && { m_data->on_filter_result(accept); }
169 template<
typename Send,
typename Fun,
typename Rec,
typename R>
172 template<
typename Send,
typename Fun,
typename Rec,
typename R>
182 auto base() const& -> R const& {
return m_data->receiver; }
183 auto base() && -> R&& {
return di::move(m_data->receiver); }
193 template<
typename Send,
typename Fun,
typename Rec,
typename R>
197 template<
typename... Values>
199 return just(di::forward<Values>(values)...);
202 template<
typename Error>
212 template<
typename... Types>
215 template<
typename Send,
typename Fun,
typename Rec,
typename R>
247 : m_data(
data,
di::move(receiver))
249 m_data.on_receive_value = [
this] {
253 [
this](
auto& values) {
255 [
this](
auto tag,
auto&... values) {
257 using IntermediateSend =
decltype(m_data.data->predicate(values...));
258 using IntermediateOp =
261 auto& op = m_intermediate_op.template emplace<IntermediateOp>(
263 return connect(m_data.data->predicate(values...),
285 m_data.on_filter_result = [
this](
bool accept) {
289 [
this](
auto&& values) {
291 [
this](
auto tag,
auto&&... values) {
292 if constexpr (SameAs<
SetValue,
decltype(tag)>) {
300 just(di::move(values)...)),
308 di::move(m_data.values));
314 m_data.on_sent_value = [
this](
bool success) {
333 template<
typename Send,
typename Fun,
typename Rec,
typename R>
336 template<
typename Send,
typename Fun,
typename Rec>
345 template<concepts::RemoveCVRefSameAs<Type> Self,
typename R>
350 self.data, di::move(receiver));
357 template<
typename Send,
typename Fun,
typename Rec>
360 template<
typename Fun,
typename Rec>
370 auto base() & -> Rec& {
return m_data->receiver; }
371 auto base() const& -> Rec const& {
return m_data->receiver; }
372 auto base() && -> Rec&& {
return di::move(m_data->receiver); }
374 template<concepts::Sender Next>
384 template<concepts::MovableValue Fun, concepts::Receiver Rec>
387 template<
typename Seq,
typename Fun,
typename Rec>
396 : m_data(
di::forward<Fun>(predicate),
di::move(receiver))
402 [[no_unique_address]]
Data m_data;
407 template<
typename Seq,
typename Fun,
typename Rec>
410 template<
typename Seq,
typename Fun>
418 template<concepts::RemoveCVRefSameAs<Type> Self,
typename Rec>
426 template<concepts::RemoveCVRefSameAs<Type> Self,
typename Env>
439 template<concepts::Sender Seq, concepts::MovableValue Fun>
443 template<concepts::Sender Seq, concepts::MovableValue Fun>
447 "The return type of the filter function must be a sequence sender.");
Definition function.h:365
Definition defer_construct.h:8
Definition tuple_forward_declaration.h:5
Definition variant_forward_declaration.h:6
#define DI_IMMOVABLE_NO_UNIQUE_ADDRESS
Definition compiler.h:15
A sender that can be returned from di::execution::set_next().
Definition sequence_sender.h:50
Definition receiver_of.h:25
Definition sequence_sender.h:102
Definition sequence_sender.h:128
Definition tag_invoke.h:33
meta::Type< DataT< meta::Decay< Fun >, Rec > > Data
Definition filter.h:77
meta::MakeCompletionSignatures< Seq, Env, ExtraSignatures< Seq, Fun, Env >, DecayValues > Signatures
Definition filter.h:62
meta::MakeCompletionSignatures< dummy_ns::DummySenderOf< meta::CompletionSignaturesOf< Seq, Env > >, Env, CompletionSignatures<>, ValueSigs< Fun, Env >::template Invoke > ExtraSignatures
Definition filter.h:54
meta::AsTemplate< meta::DecayedTuple, meta::PushFront< meta::AsList< Sig >, meta::LanguageFunctionReturn< Sig > > > SigAsTuple
Definition filter.h:65
decltype(just_var(declval< Types >()...)) JustVar
Definition filter.h:213
meta::Type< ItemOperationStateT< Send, Fun, Rec, R > > ItemOperationState
Definition filter.h:334
meta::AsTemplate< CompletionSignatures, meta::Unique< meta::PushBack< meta::Transform< meta::Concat< meta::ErrorTypesOf< Sends, Env, meta::List >... >, meta::Compose< meta::BindFront< meta::Quote< meta::AsLanguageFunction >, SetError >, meta::Quote< meta::List > > >, SetStopped()> > > NonValueCompletions
Definition filter.h:39
meta::Type< ItemReceiverT< Send, Fun, Rec, R > > ItemReceiver
Definition filter.h:147
meta::Type< FinalReceiverT< Send, Fun, Rec, R > > FinalReceiver
Definition filter.h:194
constexpr auto just_var
Definition filter.h:210
meta::Decay< T > DecayedRValue
Definition filter.h:36
meta::Type< ItemDataT< Send, Fun, Rec, R > > ItemData
Definition filter.h:105
meta::AsTemplate< Variant, meta::Unique< meta::List< Empty, Types... > > > OptionalVariant
Definition filter.h:82
meta::Type< SequenceT< meta::RemoveCVRef< Seq >, meta::Decay< Fun > > > Sequence
Definition filter.h:440
meta::Type< IntermediateReceiverT< Send, Fun, Rec, R > > IntermediateReceiver
Definition filter.h:170
meta::Type< ReceiverT< meta::Decay< Fun >, Rec > > Receiver
Definition filter.h:385
CompletionSignatures< SetValue(DecayedRValue< Values >...)> DecayValues
Definition filter.h:59
meta::Type< OperationStateT< Seq, Fun, Rec > > OperationState
Definition filter.h:408
meta::Type< ItemSenderT< meta::RemoveCVRef< Send >, meta::Decay< Fun >, Rec > > ItemSender
Definition filter.h:358
constexpr auto without
Specify a removal of an environment query override.
Definition make_env.h:127
constexpr auto set_next
Set the next sender of a sequence.
Definition sequence_sender.h:77
constexpr auto just_error
Definition just.h:87
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 filter
Filter the values of a sequence.
Definition filter.h:469
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 get_sequence_cardinality
A query that returns the cardinality of a sequence.
Definition get_sequence_cardinality.h:45
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
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 just_stopped
Definition just.h:88
constexpr auto just
Definition just.h:86
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
StatusCode< Erased< long > > Error
Definition error.h:8
Definition zstring_parser.h:9
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
constexpr auto sequence
Definition sequence.h:34
constexpr auto visit(Vis &&visitor, Vars &&... variants) -> R
Definition visit.h:39
constexpr auto data
Definition data.h:51
constexpr auto overload
Definition overload.h:28
Defines the sequence sender concepts and related CPOs.
Definition sequence_sender.h:86
Definition set_stopped.h:6
Rec receiver
Definition filter.h:72
Fun predicate
Definition filter.h:71
void set_stopped() &&
Definition filter.h:186
void set_value() &&
Definition filter.h:185
Type(ItemData< Send, Fun, Rec, R > *data)
Definition filter.h:180
auto base() const &-> R const &
Definition filter.h:182
auto base() &&-> R &&
Definition filter.h:183
auto operator()(Seq &&sequence, Fun &&predicate) const -> concepts::SequenceSender auto
Definition filter.h:444
di::Function< void()> on_receive_value
Definition filter.h:98
R receiver
Definition filter.h:95
meta::Apply< meta::Quote< OptionalVariant >, meta::Transform< meta::AsList< meta::CompletionSignaturesOf< Send, Env > >, meta::Quote< SigAsTuple > > > Values
Definition filter.h:88
Type(Data< Fun, Rec > *data, R receiver)
Definition filter.h:92
di::Function< void(bool)> on_sent_value
Definition filter.h:100
MakeEnv< meta::EnvOf< R > > Env
Definition filter.h:87
Values values
Definition filter.h:96
Data< Fun, Rec > * data
Definition filter.h:94
di::Function< void(bool)> on_filter_result
Definition filter.h:99
Type(Send &&sender, Data *data, R receiver)
Definition filter.h:246
filter_ns::FinalReceiver< Send, Fun, Rec, R > FinalReceiver
Definition filter.h:223
friend void tag_invoke(Tag< start >, Type &self)
Definition filter.h:324
filter_ns::ItemReceiver< Send, Fun, Rec, R > ItemReceiver
Definition filter.h:221
meta::AsTemplate< OptionalVariant, meta::Transform< meta::ValueTypesOf< Send, MakeEnv< meta::EnvOf< R > >, meta::List, meta::List >, meta::Chain< meta::BindBack< meta::Quote< meta::Transform >, meta::Quote< meta::AddLValueReference > >, meta::BindFront< meta::Quote< meta::Apply >, meta::Chain< meta::BindFront< meta::Quote< meta::InvokeResult >, Fun & >, meta::BindBack< meta::Quote< meta::ConnectResult >, IntermediateReceiver > > > > > > IntermediateOps
Definition filter.h:226
meta::AsTemplate< OptionalVariant, meta::Transform< meta::AsList< meta::CompletionSignaturesOf< Send, MakeEnv< meta::EnvOf< R > > > >, meta::Chain< meta::Quote< SigAsTuple >, meta::Quote< meta::AsList >, meta::BindFront< meta::Quote< meta::Apply >, meta::Chain< meta::Quote< JustVar >, meta::BindFront< meta::Quote< meta::NextSenderOf >, Rec >, meta::BindBack< meta::Quote< meta::ConnectResult >, FinalReceiver > > > > > > FinalOps
Definition filter.h:235
filter_ns::IntermediateReceiver< Send, Fun, Rec, R > IntermediateReceiver
Definition filter.h:222
filter_ns::Data< Fun, Rec > Data
Definition filter.h:219
meta::ConnectResult< Send, ItemReceiver > Op
Definition filter.h:225
filter_ns::ItemData< Send, Fun, Rec, R > ItemData
Definition filter.h:220
Type(ItemData< Send, Fun, Rec, R > *data)
Definition filter.h:113
ReceiverAdaptor< Type > Base
Definition filter.h:110
void set_error(Error &&error) &&
Definition filter.h:127
void set_value(Values &&... values) &&
Definition filter.h:119
void set_stopped() &&
Definition filter.h:134
auto base() const &-> R const &
Definition filter.h:115
auto base() &&-> R &&
Definition filter.h:116
Send sender
Definition filter.h:342
auto tag_invoke(Tag< get_env >, Type const &self)
Definition filter.h:353
friend auto tag_invoke(types::Tag< connect >, Self &&self, R receiver)
Definition filter.h:348
di::CompletionSignatures< SetValue(), SetStopped()> CompletionSignatures
Definition filter.h:340
void is_sender
Definition filter.h:339
Data< Fun, Rec > * data
Definition filter.h:343
auto operator()(SetError, Error &&error) const
Definition filter.h:203
auto operator()(SetValue, Values &&... values) const
Definition filter.h:198
auto operator()(SetStopped) const
Definition filter.h:207
friend void tag_invoke(types::Tag< start >, Type &self)
Definition filter.h:400
filter_ns::Data< Fun, Rec > Data
Definition filter.h:393
meta::SubscribeResult< Seq, Receiver > Op
Definition filter.h:392
Type(Seq &&sequence, Fun &&predicate, Rec receiver)
Definition filter.h:395
filter_ns::Receiver< Fun, Rec > Receiver
Definition filter.h:391
Type(Data< Fun, Rec > *data)
Definition filter.h:368
auto base() const &-> Rec const &
Definition filter.h:371
auto base() &-> Rec &
Definition filter.h:370
auto base() &&-> Rec &&
Definition filter.h:372
auto set_next(Next &&next) &-> concepts::NextSender auto
Definition filter.h:375
SequenceTag is_sender
Definition filter.h:413
Seq sequence
Definition filter.h:415
friend auto tag_invoke(types::Tag< subscribe >, Self &&self, Rec receiver)
Definition filter.h:421
Fun predicate
Definition filter.h:416
friend auto tag_invoke(types::Tag< get_env >, Type const &self)
Definition filter.h:433
friend auto tag_invoke(types::Tag< get_completion_signatures >, Self &&, Env &&) -> Signatures< meta::Like< Self, Seq >, Fun, MakeEnv< Env > >
Definition filter.h:428
NonValueCompletions< Env, meta::InvokeResult< Fun, Values &... > > Invoke
Definition filter.h:50
Definition completion_signuatures.h:7