YOrch 1.0.0
Loading...
Searching...
No Matches
builder_root_core_member.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <utility>
4
5#include "concepts.hpp" // IWYU pragma: keep
6#include "node_binder.hpp"
7
8namespace yorch::detail {
9
10template <typename Derived, typename... Nodes>
12 template <typename F, typename ReceiverSpec>
13 requires (sizeof...(Nodes) == 0) &&
17 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec) const& {
19 const Derived*,
20 0,
21 std::decay_t<F>,
22 std::decay_t<ReceiverSpec>,
25 > {
26 static_cast<const Derived*>(this),
27 std::forward<F>(f),
28 std::forward<ReceiverSpec>(receiver_spec),
29 {},
30 {}
31 };
32 }
33
34 template <typename F, typename ReceiverSpec, typename FanoutPolicy>
35 requires (sizeof...(Nodes) == 0) &&
40 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) const& {
42 const Derived*,
43 0,
44 std::decay_t<F>,
45 std::decay_t<ReceiverSpec>,
46 std::decay_t<FanoutPolicy>,
48 > {
49 static_cast<const Derived*>(this),
50 std::forward<F>(f),
51 std::forward<ReceiverSpec>(receiver_spec),
52 std::forward<FanoutPolicy>(fanout_policy),
53 {}
54 };
55 }
56
57 template <typename F, typename ReceiverSpec, typename AdapterChain>
58 requires (sizeof...(Nodes) == 0) &&
63 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) const& {
65 const Derived*,
66 0,
67 std::decay_t<F>,
68 std::decay_t<ReceiverSpec>,
70 std::decay_t<AdapterChain>
71 > {
72 static_cast<const Derived*>(this),
73 std::forward<F>(f),
74 std::forward<ReceiverSpec>(receiver_spec),
75 {},
76 std::forward<AdapterChain>(adapter_specs)
77 };
78 }
79
80 template <typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
81 requires (sizeof...(Nodes) == 0) &&
87 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
89 const Derived*,
90 0,
91 std::decay_t<F>,
92 std::decay_t<ReceiverSpec>,
93 std::decay_t<FanoutPolicy>,
94 std::decay_t<AdapterChain>
95 > {
96 static_cast<const Derived*>(this),
97 std::forward<F>(f),
98 std::forward<ReceiverSpec>(receiver_spec),
99 std::forward<FanoutPolicy>(fanout_policy),
100 std::forward<AdapterChain>(adapter_specs)
101 };
102 }
103
104 template <typename F, typename ReceiverSpec>
105 requires (sizeof...(Nodes) == 0) &&
109 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec) const& {
111 const Derived*,
112 0,
113 std::decay_t<F>,
114 std::decay_t<ReceiverSpec>,
117 > {
118 static_cast<const Derived*>(this),
119 std::forward<F>(f),
120 std::forward<ReceiverSpec>(receiver_spec),
121 {},
122 {}
123 };
124 }
125
126 template <typename F, typename ReceiverSpec, typename FanoutPolicy>
127 requires (sizeof...(Nodes) == 0) &&
132 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) const& {
134 const Derived*,
135 0,
136 std::decay_t<F>,
137 std::decay_t<ReceiverSpec>,
138 std::decay_t<FanoutPolicy>,
140 > {
141 static_cast<const Derived*>(this),
142 std::forward<F>(f),
143 std::forward<ReceiverSpec>(receiver_spec),
144 std::forward<FanoutPolicy>(fanout_policy),
145 {}
146 };
147 }
148
149 template <typename F, typename ReceiverSpec, typename AdapterChain>
150 requires (sizeof...(Nodes) == 0) &&
155 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) const& {
157 const Derived*,
158 0,
159 std::decay_t<F>,
160 std::decay_t<ReceiverSpec>,
162 std::decay_t<AdapterChain>
163 > {
164 static_cast<const Derived*>(this),
165 std::forward<F>(f),
166 std::forward<ReceiverSpec>(receiver_spec),
167 {},
168 std::forward<AdapterChain>(adapter_specs)
169 };
170 }
171
172 template <typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
173 requires (sizeof...(Nodes) == 0) &&
179 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
181 const Derived*,
182 0,
183 std::decay_t<F>,
184 std::decay_t<ReceiverSpec>,
185 std::decay_t<FanoutPolicy>,
186 std::decay_t<AdapterChain>
187 > {
188 static_cast<const Derived*>(this),
189 std::forward<F>(f),
190 std::forward<ReceiverSpec>(receiver_spec),
191 std::forward<FanoutPolicy>(fanout_policy),
192 std::forward<AdapterChain>(adapter_specs)
193 };
194 }
195
196 template <typename F, typename ReceiverSpec>
197 requires (sizeof...(Nodes) == 0) &&
201 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec) && {
203 Derived,
204 0,
205 std::decay_t<F>,
206 std::decay_t<ReceiverSpec>,
209 > {
210 static_cast<Derived&&>(*this),
211 std::forward<F>(f),
212 std::forward<ReceiverSpec>(receiver_spec),
213 {},
214 {}
215 };
216 }
217
218 template <typename F, typename ReceiverSpec, typename FanoutPolicy>
219 requires (sizeof...(Nodes) == 0) &&
224 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) && {
226 Derived,
227 0,
228 std::decay_t<F>,
229 std::decay_t<ReceiverSpec>,
230 std::decay_t<FanoutPolicy>,
232 > {
233 static_cast<Derived&&>(*this),
234 std::forward<F>(f),
235 std::forward<ReceiverSpec>(receiver_spec),
236 std::forward<FanoutPolicy>(fanout_policy),
237 {}
238 };
239 }
240
241 template <typename F, typename ReceiverSpec, typename AdapterChain>
242 requires (sizeof...(Nodes) == 0) &&
247 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) && {
249 Derived,
250 0,
251 std::decay_t<F>,
252 std::decay_t<ReceiverSpec>,
254 std::decay_t<AdapterChain>
255 > {
256 static_cast<Derived&&>(*this),
257 std::forward<F>(f),
258 std::forward<ReceiverSpec>(receiver_spec),
259 {},
260 std::forward<AdapterChain>(adapter_specs)
261 };
262 }
263
264 template <typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
265 requires (sizeof...(Nodes) == 0) &&
271 [[nodiscard]] constexpr auto root_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
273 Derived,
274 0,
275 std::decay_t<F>,
276 std::decay_t<ReceiverSpec>,
277 std::decay_t<FanoutPolicy>,
278 std::decay_t<AdapterChain>
279 > {
280 static_cast<Derived&&>(*this),
281 std::forward<F>(f),
282 std::forward<ReceiverSpec>(receiver_spec),
283 std::forward<FanoutPolicy>(fanout_policy),
284 std::forward<AdapterChain>(adapter_specs)
285 };
286 }
287
288 template <typename F, typename ReceiverSpec>
289 requires (sizeof...(Nodes) == 0) &&
293 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec) && {
295 Derived,
296 0,
297 std::decay_t<F>,
298 std::decay_t<ReceiverSpec>,
301 > {
302 static_cast<Derived&&>(*this),
303 std::forward<F>(f),
304 std::forward<ReceiverSpec>(receiver_spec),
305 {},
306 {}
307 };
308 }
309
310 template <typename F, typename ReceiverSpec, typename FanoutPolicy>
311 requires (sizeof...(Nodes) == 0) &&
316 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) && {
318 Derived,
319 0,
320 std::decay_t<F>,
321 std::decay_t<ReceiverSpec>,
322 std::decay_t<FanoutPolicy>,
324 > {
325 static_cast<Derived&&>(*this),
326 std::forward<F>(f),
327 std::forward<ReceiverSpec>(receiver_spec),
328 std::forward<FanoutPolicy>(fanout_policy),
329 {}
330 };
331 }
332
333 template <typename F, typename ReceiverSpec, typename AdapterChain>
334 requires (sizeof...(Nodes) == 0) &&
339 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) && {
341 Derived,
342 0,
343 std::decay_t<F>,
344 std::decay_t<ReceiverSpec>,
346 std::decay_t<AdapterChain>
347 > {
348 static_cast<Derived&&>(*this),
349 std::forward<F>(f),
350 std::forward<ReceiverSpec>(receiver_spec),
351 {},
352 std::forward<AdapterChain>(adapter_specs)
353 };
354 }
355
356 template <typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
357 requires (sizeof...(Nodes) == 0) &&
363 [[nodiscard]] constexpr auto root_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
365 Derived,
366 0,
367 std::decay_t<F>,
368 std::decay_t<ReceiverSpec>,
369 std::decay_t<FanoutPolicy>,
370 std::decay_t<AdapterChain>
371 > {
372 static_cast<Derived&&>(*this),
373 std::forward<F>(f),
374 std::forward<ReceiverSpec>(receiver_spec),
375 std::forward<FanoutPolicy>(fanout_policy),
376 std::forward<AdapterChain>(adapter_specs)
377 };
378 }
379};
380
381} // namespace yorch::detail
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec) &&
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec) const &
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) const &
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) &&
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec) const &
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) &&
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) &&
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) const &
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) const &
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) &&
constexpr auto root_into_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) const &
constexpr auto root_member(F &&f, ReceiverSpec &&receiver_spec) &&