@@ -14,50 +14,42 @@ using namespace std::string_literals;
14
14
enum class success { one };
15
15
enum class failure { fail_one };
16
16
17
- struct expected_to_channel_t
18
- {
17
+ struct expected_to_channel_t {
19
18
template <typename Receiver>
20
- struct own_receiver
21
- {
19
+ struct own_receiver {
22
20
using receiver_concept = ex::receiver_t ;
23
21
Receiver* receiver;
24
22
template <typename Value, typename Error>
25
23
auto set_value (std::expected<Value, Error>&& exp) noexcept -> void {
26
24
if (exp ) {
27
- std::cout << " received an expected with value from child/upstream\n " << std::flush;
28
- ex::set_value (std::move (*receiver), exp .value_or (Value{}));
29
- std::cout << " set_value\n " << std::flush;
30
- }
31
- else {
32
- std::cout << " received an expected with error from child/upstream\n " ;
33
- ex::set_error (std::move (*receiver), exp .error_or (Error{}));
25
+ std::cout << " received an expected with value from child/upstream\n " << std::flush;
26
+ ex::set_value (std::move (*receiver), exp .value_or (Value{}));
27
+ std::cout << " set_value\n " << std::flush;
28
+ } else {
29
+ std::cout << " received an expected with error from child/upstream\n " ;
30
+ ex::set_error (std::move (*receiver), exp .error_or (Error{}));
34
31
}
35
32
}
36
33
template <typename Error>
37
- auto set_error (Error&& error) noexcept -> void{
34
+ auto set_error (Error&& error) noexcept -> void {
38
35
std::cout << " received an error from child/upstream" ;
39
36
ex::set_error (std::move (*receiver), std::forward<Error>(error));
40
37
}
41
- auto set_stopped () noexcept -> void{
38
+ auto set_stopped () noexcept -> void {
42
39
std::cout << " received an cancelletion from child/upstream" ;
43
40
ex::set_stopped (std::move (*receiver));
44
41
}
45
42
};
46
43
template <ex::sender CSender, ex::receiver Receiver>
47
- struct state
48
- {
44
+ struct state {
49
45
using operation_state_concept = ex::operation_state_t ;
50
46
using child_state_t = decltype(ex::connect(std::declval<CSender>(), std::declval<own_receiver<Receiver>>()));
51
- Receiver parent_receiver;
47
+ Receiver parent_receiver;
52
48
child_state_t child_state;
53
49
template <ex::sender S, ex::receiver R>
54
50
state (S&& child_sender, R&& parent_receiver)
55
- : parent_receiver(std::forward<R>(parent_receiver))
56
- , child_state(ex::connect(
57
- std::forward<S>(child_sender),
58
- own_receiver<Receiver>{&this ->parent_receiver })
59
- )
60
- {
51
+ : parent_receiver(std::forward<R>(parent_receiver)),
52
+ child_state(ex::connect(std::forward<S>(child_sender), own_receiver<Receiver>{&this ->parent_receiver })) {
61
53
}
62
54
void start () & noexcept {
63
55
std::cout << " starting execpted_to_channel\n " ;
@@ -66,46 +58,36 @@ struct expected_to_channel_t
66
58
};
67
59
68
60
template <ex::sender CSender>
69
- struct sender
70
- {
61
+ struct sender {
71
62
using sender_concept = ex::sender_t ;
72
63
// value_types_of<CSender....> -> set_value_t(std::expected<T, E>)
73
64
// -> completion_signatures<set_value_t(T), set_error_t(E)>
74
65
// -> + error_type_of<CSender...>
75
66
// -> + sends_stopped<CSender...> -> set_stopped_t()
76
67
// -> unique
77
- using completion_signatures = ex::completion_signatures<
78
- ex::set_value_t (success),
79
- ex::set_error_t (failure)
80
- >;
68
+ using completion_signatures = ex::completion_signatures<ex::set_value_t (success), ex::set_error_t (failure)>;
81
69
CSender child_sender;
82
70
83
71
template <ex::receiver Receiver>
84
- state<CSender, std::remove_cvref_t <Receiver>> connect (Receiver&& receiver) &&
85
- {
86
- return { std::move (this ->child_sender ), std::forward<Receiver>(receiver) };
72
+ state<CSender, std::remove_cvref_t <Receiver>> connect (Receiver&& receiver) && {
73
+ return {std::move (this ->child_sender ), std::forward<Receiver>(receiver)};
87
74
}
88
75
template <ex::receiver Receiver>
89
- state<CSender, std::remove_cvref_t <Receiver>> connect (Receiver&& receiver) const &
90
- {
91
- return { this ->child_sender , std::forward<Receiver>(receiver) };
76
+ state<CSender, std::remove_cvref_t <Receiver>> connect (Receiver&& receiver) const & {
77
+ return {this ->child_sender , std::forward<Receiver>(receiver)};
92
78
}
93
79
};
94
80
95
81
template <ex::sender CSender>
96
82
sender<std::remove_cvref_t <CSender>> operator ()(CSender&& child_sender) const {
97
- return { std::forward<CSender>(child_sender) };
83
+ return {std::forward<CSender>(child_sender)};
98
84
}
99
85
auto operator ()() const { return ex::detail::sender_adaptor{*this }; }
100
86
};
101
87
inline constexpr expected_to_channel_t expected_to_channel{};
102
88
103
- int main ()
104
- {
105
- ex::sync_wait (
106
- ex::just (std::expected<success, failure>(success::one))
107
- | expected_to_channel ()
108
- | ex::then ([](success) noexcept { std::cout << " success\n " ; })
109
- | ex::upon_error ([](failure) noexcept { std::cout << " fail\n " ; })
110
- );
89
+ int main () {
90
+ ex::sync_wait (ex::just (std::expected<success, failure>(success::one)) | expected_to_channel () |
91
+ ex::then ([](success) noexcept { std::cout << " success\n " ; }) |
92
+ ex::upon_error ([](failure) noexcept { std::cout << " fail\n " ; }));
111
93
}
0 commit comments