YOrch 1.0.0
Loading...
Searching...
No Matches
builder_node_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 "metadata.hpp"
7#include "node_binder.hpp"
8
9namespace yorch::detail {
10
11template <typename Derived, typename... Nodes>
13 template <std::size_t Level, typename F, typename ReceiverSpec>
18 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec) const& {
20 const Derived*,
21 Level,
22 std::decay_t<F>,
23 std::decay_t<ReceiverSpec>,
26 > {
27 static_cast<const Derived*>(this),
28 std::forward<F>(f),
29 std::forward<ReceiverSpec>(receiver_spec),
30 {},
31 {}
32 };
33 }
34
35 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy>
41 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) const& {
43 const Derived*,
44 Level,
45 std::decay_t<F>,
46 std::decay_t<ReceiverSpec>,
47 std::decay_t<FanoutPolicy>,
49 > {
50 static_cast<const Derived*>(this),
51 std::forward<F>(f),
52 std::forward<ReceiverSpec>(receiver_spec),
53 std::forward<FanoutPolicy>(fanout_policy),
54 {}
55 };
56 }
57
58 template <std::size_t Level, typename F, typename ReceiverSpec, typename AdapterChain>
64 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) const& {
66 const Derived*,
67 Level,
68 std::decay_t<F>,
69 std::decay_t<ReceiverSpec>,
71 std::decay_t<AdapterChain>
72 > {
73 static_cast<const Derived*>(this),
74 std::forward<F>(f),
75 std::forward<ReceiverSpec>(receiver_spec),
76 {},
77 std::forward<AdapterChain>(adapter_specs)
78 };
79 }
80
81 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
88 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
90 const Derived*,
91 Level,
92 std::decay_t<F>,
93 std::decay_t<ReceiverSpec>,
94 std::decay_t<FanoutPolicy>,
95 std::decay_t<AdapterChain>
96 > {
97 static_cast<const Derived*>(this),
98 std::forward<F>(f),
99 std::forward<ReceiverSpec>(receiver_spec),
100 std::forward<FanoutPolicy>(fanout_policy),
101 std::forward<AdapterChain>(adapter_specs)
102 };
103 }
104 template <std::size_t Level, typename F, typename ReceiverSpec>
105 requires (detail::append_level_valid_v<Level, Nodes...>) &&
109 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec) const& {
111 const Derived*,
112 Level,
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 <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy>
127 requires (detail::append_level_valid_v<Level, Nodes...>) &&
132 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) const& {
134 const Derived*,
135 Level,
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 <std::size_t Level, typename F, typename ReceiverSpec, typename AdapterChain>
150 requires (detail::append_level_valid_v<Level, Nodes...>) &&
155 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) const& {
157 const Derived*,
158 Level,
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 <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
173 requires (detail::append_level_valid_v<Level, Nodes...>) &&
179 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
181 const Derived*,
182 Level,
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 template <std::size_t Level, typename F, typename ReceiverSpec>
196 requires (detail::append_level_valid_v<Level, Nodes...>) &&
200 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec) && {
202 Derived,
203 Level,
204 std::decay_t<F>,
205 std::decay_t<ReceiverSpec>,
208 > {
209 static_cast<Derived&&>(*this),
210 std::forward<F>(f),
211 std::forward<ReceiverSpec>(receiver_spec),
212 {},
213 {}
214 };
215 }
216
217 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy>
218 requires (detail::append_level_valid_v<Level, Nodes...>) &&
223 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) && {
225 Derived,
226 Level,
227 std::decay_t<F>,
228 std::decay_t<ReceiverSpec>,
229 std::decay_t<FanoutPolicy>,
231 > {
232 static_cast<Derived&&>(*this),
233 std::forward<F>(f),
234 std::forward<ReceiverSpec>(receiver_spec),
235 std::forward<FanoutPolicy>(fanout_policy),
236 {}
237 };
238 }
239
240 template <std::size_t Level, typename F, typename ReceiverSpec, typename AdapterChain>
241 requires (detail::append_level_valid_v<Level, Nodes...>) &&
246 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) && {
248 Derived,
249 Level,
250 std::decay_t<F>,
251 std::decay_t<ReceiverSpec>,
253 std::decay_t<AdapterChain>
254 > {
255 static_cast<Derived&&>(*this),
256 std::forward<F>(f),
257 std::forward<ReceiverSpec>(receiver_spec),
258 {},
259 std::forward<AdapterChain>(adapter_specs)
260 };
261 }
262
263 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
264 requires (detail::append_level_valid_v<Level, Nodes...>) &&
270 [[nodiscard]] constexpr auto node_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
272 Derived,
273 Level,
274 std::decay_t<F>,
275 std::decay_t<ReceiverSpec>,
276 std::decay_t<FanoutPolicy>,
277 std::decay_t<AdapterChain>
278 > {
279 static_cast<Derived&&>(*this),
280 std::forward<F>(f),
281 std::forward<ReceiverSpec>(receiver_spec),
282 std::forward<FanoutPolicy>(fanout_policy),
283 std::forward<AdapterChain>(adapter_specs)
284 };
285 }
286 template <std::size_t Level, typename F, typename ReceiverSpec>
287 requires (detail::append_level_valid_v<Level, Nodes...>) &&
291 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec) && {
293 Derived,
294 Level,
295 std::decay_t<F>,
296 std::decay_t<ReceiverSpec>,
299 > {
300 static_cast<Derived&&>(*this),
301 std::forward<F>(f),
302 std::forward<ReceiverSpec>(receiver_spec),
303 {},
304 {}
305 };
306 }
307
308 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy>
309 requires (detail::append_level_valid_v<Level, Nodes...>) &&
314 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) && {
316 Derived,
317 Level,
318 std::decay_t<F>,
319 std::decay_t<ReceiverSpec>,
320 std::decay_t<FanoutPolicy>,
322 > {
323 static_cast<Derived&&>(*this),
324 std::forward<F>(f),
325 std::forward<ReceiverSpec>(receiver_spec),
326 std::forward<FanoutPolicy>(fanout_policy),
327 {}
328 };
329 }
330
331 template <std::size_t Level, typename F, typename ReceiverSpec, typename AdapterChain>
332 requires (detail::append_level_valid_v<Level, Nodes...>) &&
337 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) && {
339 Derived,
340 Level,
341 std::decay_t<F>,
342 std::decay_t<ReceiverSpec>,
344 std::decay_t<AdapterChain>
345 > {
346 static_cast<Derived&&>(*this),
347 std::forward<F>(f),
348 std::forward<ReceiverSpec>(receiver_spec),
349 {},
350 std::forward<AdapterChain>(adapter_specs)
351 };
352 }
353
354 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
355 requires (detail::append_level_valid_v<Level, Nodes...>) &&
361 [[nodiscard]] constexpr auto node_into_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
363 Derived,
364 Level,
365 std::decay_t<F>,
366 std::decay_t<ReceiverSpec>,
367 std::decay_t<FanoutPolicy>,
368 std::decay_t<AdapterChain>
369 > {
370 static_cast<Derived&&>(*this),
371 std::forward<F>(f),
372 std::forward<ReceiverSpec>(receiver_spec),
373 std::forward<FanoutPolicy>(fanout_policy),
374 std::forward<AdapterChain>(adapter_specs)
375 };
376 }
377};
378
379} // namespace yorch::detail
constexpr bool append_level_valid_v
Definition metadata.hpp:45
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec) &&
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) &&
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) &&
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec) const &
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) const &
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) &&
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) const &
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec) &&
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec) const &
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) const &
constexpr auto node_into_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) const &
constexpr auto node_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) &&