Iros
 
Loading...
Searching...
No Matches
with_env.h
Go to the documentation of this file.
1#pragma once
2
14#include "di/function/curry.h"
17#include "di/meta/constexpr.h"
18#include "di/meta/core.h"
19#include "di/meta/operations.h"
20#include "di/meta/util.h"
21
22namespace di::execution {
23namespace with_env_ns {
24 template<typename Rec, typename Env>
25 struct ReceiverT {
26 struct Type : ReceiverAdaptor<Type, Rec> {
27 private:
28 using Base = ReceiverAdaptor<Type, Rec>;
29 friend Base;
30
31 public:
32 explicit Type(Rec reciever, Env env) : Base(util::move(reciever)), m_env(util::move(env)) {}
33
34 private:
35 auto get_env() const& -> Env { return m_env; }
36
37 Env m_env;
38 };
39 };
40
41 template<concepts::Receiver Rec, typename Env>
43
44 template<typename Send, typename Env>
45 struct SenderT {
46 struct Type {
47 using is_sender = void;
48
49 [[no_unique_address]] Send m_sender;
50 [[no_unique_address]] Env m_env;
51
52 private:
53 template<concepts::RemoveCVRefSameAs<Type> Self, typename En>
58
59 template<concepts::RemoveCVRefSameAs<Type> Self, concepts::Receiver Rec>
61 friend auto tag_invoke(types::Tag<connect>, Self&& self, Rec receiver) {
62 return connect(util::forward_like<Self>(self.m_sender),
63 Receiver<Rec, Env> { util::move(receiver), util::forward_like<Self>(self.m_env) });
64 }
65
66 auto tag_invoke(types::Tag<get_env>, Type const& self) -> decltype(auto) { return get_env(self.m_sender); }
67 };
68 };
69
70 template<concepts::Sender Send, typename Env>
72
73 struct Function {
74 template<concepts::CopyConstructible Env, concepts::Sender Send>
75 auto operator()(Env&& env, Send&& sender) const {
76 return Sender<Send, Env> { util::forward<Send>(sender), util::forward<Env>(env) };
77 }
78 };
79
81 template<concepts::Sender Send>
82 auto operator()(Send&& sender) const {
84 return Sender<Send, Env> { util::forward<Send>(sender), make_env(empty_env, with(is_debug_env, c_<true>)) };
85 }
86 };
87}
88
108
120}
Definition sender_to.h:11
Definition with_env.h:23
meta::Type< ReceiverT< Rec, Env > > Receiver
Definition with_env.h:42
meta::Type< SenderT< meta::RemoveCVRef< Send >, meta::Decay< Env > > > Sender
Definition with_env.h:71
Definition bulk.h:30
constexpr auto make_env
Create an environment with overrides for queries.
Definition make_env.h:147
constexpr auto with_debug_env
Adapts a sender to run with a debug environment.
Definition with_env.h:119
constexpr auto with_env
Adapts a sender to run with a specified environment.
Definition with_env.h:107
meta::Type< receiver_interface_ns::ReceiverAdaptor< Self, Base > > ReceiverAdaptor
Definition receiver_adaptor.h:236
constexpr auto with
Specify an override for an environment query.
Definition make_env.h:112
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 is_debug_env
Returns whether the given environment is a debug environment.
Definition is_debug_env.h:39
constexpr auto curry
Definition curry.h:140
T::Type Type
Definition core.h:26
decltype(execution::get_completion_signatures(util::declval< Sender >(), util::declval< Env >())) CompletionSignaturesOf
Definition completion_signatures_of.h:12
Conditional< concepts::LanguageArray< RemoveReference< T > >, RemoveExtent< RemoveReference< T > > *, Conditional< concepts::LanguageFunction< RemoveReference< T > >, AddPointer< RemoveReference< T > >, RemoveCVRef< T > > > Decay
Definition language.h:574
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Definition vocab.h:96
constexpr auto forward_like(U &&value) -> decltype(auto)
Definition forward_like.h:8
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto c_
A value of type Constexpr<val>.
Definition constexpr.h:252
constexpr auto empty_env
Definition empty_env.h:6
auto operator()(Send &&sender) const
Definition with_env.h:82
Definition with_env.h:73
auto operator()(Env &&env, Send &&sender) const
Definition with_env.h:75
Type(Rec reciever, Env env)
Definition with_env.h:32
void is_sender
Definition with_env.h:47
friend auto tag_invoke(types::Tag< get_completion_signatures >, Self &&, En &&) -> meta::CompletionSignaturesOf< meta::Like< Self, Send >, Env >
Definition with_env.h:54
Env m_env
Definition with_env.h:50
friend auto tag_invoke(types::Tag< connect >, Self &&self, Rec receiver)
Definition with_env.h:61
Send m_sender
Definition with_env.h:49
Definition with_env.h:45
A wrapper for a constexpr value.
Definition core.h:77