YOrch 1.0.0
Loading...
Searching...
No Matches
builder_node_core_forward.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>
16 [[nodiscard]] constexpr auto node_forward_prev(F&& f) const& {
18 const Derived*,
19 Level,
20 std::decay_t<F>,
23 > {
24 static_cast<const Derived*>(this),
25 std::forward<F>(f),
26 {},
27 {}
28 };
29 }
30
31 template <std::size_t Level, typename F, typename FanoutPolicy>
35 [[nodiscard]] constexpr auto node_forward_prev(F&& f, FanoutPolicy&& fanout_policy) const& {
37 const Derived*,
38 Level,
39 std::decay_t<F>,
40 std::decay_t<FanoutPolicy>,
42 > {
43 static_cast<const Derived*>(this),
44 std::forward<F>(f),
45 std::forward<FanoutPolicy>(fanout_policy),
46 {}
47 };
48 }
49
50 template <std::size_t Level, typename F, typename AdapterChain>
54 [[nodiscard]] constexpr auto node_forward_prev(F&& f, AdapterChain&& adapter_specs) const& {
56 const Derived*,
57 Level,
58 std::decay_t<F>,
60 std::decay_t<AdapterChain>
61 > {
62 static_cast<const Derived*>(this),
63 std::forward<F>(f),
64 {},
65 std::forward<AdapterChain>(adapter_specs)
66 };
67 }
68
69 template <std::size_t Level, typename F, typename FanoutPolicy, typename AdapterChain>
74 [[nodiscard]] constexpr auto node_forward_prev(F&& f, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
76 const Derived*,
77 Level,
78 std::decay_t<F>,
79 std::decay_t<FanoutPolicy>,
80 std::decay_t<AdapterChain>
81 > {
82 static_cast<const Derived*>(this),
83 std::forward<F>(f),
84 std::forward<FanoutPolicy>(fanout_policy),
85 std::forward<AdapterChain>(adapter_specs)
86 };
87 }
88
89 template <std::size_t Level, typename F, typename ReceiverSpec>
94 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec) const& {
96 const Derived*,
97 Level,
98 std::decay_t<F>,
99 std::decay_t<ReceiverSpec>,
102 > {
103 static_cast<const Derived*>(this),
104 std::forward<F>(f),
105 std::forward<ReceiverSpec>(receiver_spec),
106 {},
107 {}
108 };
109 }
110
111 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy>
112 requires (detail::append_level_valid_v<Level, Nodes...>) &&
117 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) const& {
119 const Derived*,
120 Level,
121 std::decay_t<F>,
122 std::decay_t<ReceiverSpec>,
123 std::decay_t<FanoutPolicy>,
125 > {
126 static_cast<const Derived*>(this),
127 std::forward<F>(f),
128 std::forward<ReceiverSpec>(receiver_spec),
129 std::forward<FanoutPolicy>(fanout_policy),
130 {}
131 };
132 }
133
134 template <std::size_t Level, typename F, typename ReceiverSpec, typename AdapterChain>
135 requires (detail::append_level_valid_v<Level, Nodes...>) &&
140 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) const& {
142 const Derived*,
143 Level,
144 std::decay_t<F>,
145 std::decay_t<ReceiverSpec>,
147 std::decay_t<AdapterChain>
148 > {
149 static_cast<const Derived*>(this),
150 std::forward<F>(f),
151 std::forward<ReceiverSpec>(receiver_spec),
152 {},
153 std::forward<AdapterChain>(adapter_specs)
154 };
155 }
156
157 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
158 requires (detail::append_level_valid_v<Level, Nodes...>) &&
164 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
166 const Derived*,
167 Level,
168 std::decay_t<F>,
169 std::decay_t<ReceiverSpec>,
170 std::decay_t<FanoutPolicy>,
171 std::decay_t<AdapterChain>
172 > {
173 static_cast<const Derived*>(this),
174 std::forward<F>(f),
175 std::forward<ReceiverSpec>(receiver_spec),
176 std::forward<FanoutPolicy>(fanout_policy),
177 std::forward<AdapterChain>(adapter_specs)
178 };
179 }
180
181 template <std::size_t Level, typename F>
182 requires (detail::append_level_valid_v<Level, Nodes...>) &&
184 [[nodiscard]] constexpr auto node_forward_prev(F&& f) && {
186 Derived,
187 Level,
188 std::decay_t<F>,
191 > {
192 static_cast<Derived&&>(*this),
193 std::forward<F>(f),
194 {},
195 {}
196 };
197 }
198
199 template <std::size_t Level, typename F, typename FanoutPolicy>
200 requires (detail::append_level_valid_v<Level, Nodes...>) &&
205 Derived,
206 Level,
207 std::decay_t<F>,
208 std::decay_t<FanoutPolicy>,
210 > {
211 static_cast<Derived&&>(*this),
212 std::forward<F>(f),
213 std::forward<FanoutPolicy>(fanout_policy),
214 {}
215 };
216 }
217
218 template <std::size_t Level, typename F, typename AdapterChain>
219 requires (detail::append_level_valid_v<Level, Nodes...>) &&
222 [[nodiscard]] constexpr auto node_forward_prev(F&& f, AdapterChain&& adapter_specs) && {
224 Derived,
225 Level,
226 std::decay_t<F>,
228 std::decay_t<AdapterChain>
229 > {
230 static_cast<Derived&&>(*this),
231 std::forward<F>(f),
232 {},
233 std::forward<AdapterChain>(adapter_specs)
234 };
235 }
236
237 template <std::size_t Level, typename F, typename FanoutPolicy, typename AdapterChain>
238 requires (detail::append_level_valid_v<Level, Nodes...>) &&
242 [[nodiscard]] constexpr auto node_forward_prev(F&& f, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
244 Derived,
245 Level,
246 std::decay_t<F>,
247 std::decay_t<FanoutPolicy>,
248 std::decay_t<AdapterChain>
249 > {
250 static_cast<Derived&&>(*this),
251 std::forward<F>(f),
252 std::forward<FanoutPolicy>(fanout_policy),
253 std::forward<AdapterChain>(adapter_specs)
254 };
255 }
256
257 template <std::size_t Level, typename F, typename ReceiverSpec>
258 requires (detail::append_level_valid_v<Level, Nodes...>) &&
262 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec) && {
264 Derived,
265 Level,
266 std::decay_t<F>,
267 std::decay_t<ReceiverSpec>,
270 > {
271 static_cast<Derived&&>(*this),
272 std::forward<F>(f),
273 std::forward<ReceiverSpec>(receiver_spec),
274 {},
275 {}
276 };
277 }
278
279 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy>
280 requires (detail::append_level_valid_v<Level, Nodes...>) &&
285 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy) && {
287 Derived,
288 Level,
289 std::decay_t<F>,
290 std::decay_t<ReceiverSpec>,
291 std::decay_t<FanoutPolicy>,
293 > {
294 static_cast<Derived&&>(*this),
295 std::forward<F>(f),
296 std::forward<ReceiverSpec>(receiver_spec),
297 std::forward<FanoutPolicy>(fanout_policy),
298 {}
299 };
300 }
301
302 template <std::size_t Level, typename F, typename ReceiverSpec, typename AdapterChain>
303 requires (detail::append_level_valid_v<Level, Nodes...>) &&
308 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs) && {
310 Derived,
311 Level,
312 std::decay_t<F>,
313 std::decay_t<ReceiverSpec>,
315 std::decay_t<AdapterChain>
316 > {
317 static_cast<Derived&&>(*this),
318 std::forward<F>(f),
319 std::forward<ReceiverSpec>(receiver_spec),
320 {},
321 std::forward<AdapterChain>(adapter_specs)
322 };
323 }
324
325 template <std::size_t Level, typename F, typename ReceiverSpec, typename FanoutPolicy, typename AdapterChain>
326 requires (detail::append_level_valid_v<Level, Nodes...>) &&
332 [[nodiscard]] constexpr auto node_forward_prev_member(F&& f, ReceiverSpec&& receiver_spec, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
334 Derived,
335 Level,
336 std::decay_t<F>,
337 std::decay_t<ReceiverSpec>,
338 std::decay_t<FanoutPolicy>,
339 std::decay_t<AdapterChain>
340 > {
341 static_cast<Derived&&>(*this),
342 std::forward<F>(f),
343 std::forward<ReceiverSpec>(receiver_spec),
344 std::forward<FanoutPolicy>(fanout_policy),
345 std::forward<AdapterChain>(adapter_specs)
346 };
347 }
348};
349
350} // 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_forward_prev(F &&f, AdapterChain &&adapter_specs) &&
constexpr auto node_forward_prev(F &&f, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec) const &
constexpr auto node_forward_prev(F &&f, FanoutPolicy &&fanout_policy) &&
constexpr auto node_forward_prev(F &&f, AdapterChain &&adapter_specs) const &
constexpr auto node_forward_prev(F &&f, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) &&
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec) &&
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) const &
constexpr auto node_forward_prev(F &&f, FanoutPolicy &&fanout_policy) const &
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec, AdapterChain &&adapter_specs) &&
constexpr auto node_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec, FanoutPolicy &&fanout_policy) const &