Iros
 
Loading...
Searching...
No Matches
read.h
Go to the documentation of this file.
1#pragma once
2
13#include "di/function/invoke.h"
14#include "di/meta/util.h"
15#include "di/util/immovable.h"
16
17namespace di::execution {
18namespace read_ns {
19 template<typename Tag>
20 struct SenderT {
21 struct Type {
22 using is_sender = void;
23
24 template<typename Receiver>
27 public:
28 constexpr explicit Type(Receiver receiver) : m_receiver(di::move(receiver)) {}
29
30 private:
32 set_value(util::move(self.m_receiver), auto(Tag {}(get_env(self.m_receiver))));
33 }
34
35 Receiver m_receiver;
36 };
37 };
38
39 template<typename Receiver>
41
42 template<concepts::Receiver Receiver>
44 friend auto tag_invoke(types::Tag<connect>, Type, Receiver&& receiver) {
45 return OperationState<meta::Decay<Receiver>> { util::forward<Receiver>(receiver) };
46 }
47
48 template<typename Env>
54 };
55 };
56
57 template<typename Tag>
59
60 struct Function {
61 template<typename Tag>
62 constexpr auto operator()(Tag) const {
63 return Sender<Tag> {};
64 }
65 };
66}
67
68constexpr inline auto read = read_ns::Function {};
69
70namespace detail {
71 constexpr auto GetSchedulerFunction::operator()() const {
72 return read(get_scheduler);
73 }
74
78
79 constexpr auto GetStopTokenFunction::operator()() const {
80 return read(get_stop_token);
81 }
82
83 constexpr auto GetAllocatorFunction::operator()() const {
84 return read(get_allocator);
85 }
86
87 constexpr auto GetEnvFunction::operator()() const {
89 }
90}
91}
friend void tag_invoke(types::Tag< execution::start >, Type &self)
Definition read.h:31
constexpr Type(Receiver receiver)
Definition read.h:28
Definition invoke.h:58
Definition read.h:70
Definition read.h:18
meta::Type< SenderT< Tag > > Sender
Definition read.h:58
Definition bulk.h:30
constexpr auto read
Definition read.h:68
constexpr auto get_delegatee_scheduler
Definition get_delegatee_scheduler.h:21
constexpr auto get_scheduler
Definition get_scheduler.h:20
constexpr auto get_stop_token
Definition get_stop_token.h:25
constexpr auto get_env
Definition get_env.h:27
constexpr auto get_allocator
Definition get_allocator.h:27
constexpr auto set_value
Definition set_value.h:14
constexpr auto identity
Definition identity.h:16
T::Type Type
Definition core.h:26
decltype(function::detail::invoke_impl(util::declval< Ts >()...)) InvokeResult
Definition invoke.h:64
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Definition zstring_parser.h:9
Definition set_value.h:6
constexpr auto operator()() const
Definition read.h:83
constexpr auto operator()() const
Definition read.h:75
constexpr auto operator()() const
Definition read.h:87
constexpr auto operator()() const
Definition read.h:71
constexpr auto operator()() const
Definition read.h:79
constexpr auto operator()(Tag) const
Definition read.h:62
friend auto tag_invoke(types::Tag< get_completion_signatures >, Type, Env &&) -> types::CompletionSignatures< SetValue(meta::InvokeResult< Tag, Env >)>
Definition read.h:50
void is_sender
Definition read.h:22
meta::Type< OperationStateT< Receiver > > OperationState
Definition read.h:40
friend auto tag_invoke(types::Tag< connect >, Type, Receiver &&receiver)
Definition read.h:44
Definition completion_signuatures.h:7
Definition immovable.h:4