YOrch 1.0.0
Loading...
Searching...
No Matches
builder_root_core_ordinary.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 Task>
13 requires (sizeof...(Nodes) == 0) &&
15 [[nodiscard]] constexpr auto root(Task&& task) const& {
16 return static_cast<const Derived&>(*this).template node<0>(std::forward<Task>(task));
17 }
18
19 template <typename Task, typename FanoutPolicy>
20 requires (sizeof...(Nodes) == 0) &&
23 [[nodiscard]] constexpr auto root(Task&& task, FanoutPolicy&& fanout_policy) const& {
24 return static_cast<const Derived&>(*this).template node<0>(std::forward<Task>(task), std::forward<FanoutPolicy>(fanout_policy));
25 }
26
27 template <typename F>
28 requires (sizeof...(Nodes) == 0) &&
30 [[nodiscard]] constexpr auto root(F&& f) const& {
32 const Derived*,
33 0,
34 std::decay_t<F>,
37 > {
38 static_cast<const Derived*>(this),
39 std::forward<F>(f),
40 {},
41 {}
42 };
43 }
44
45 template <typename F, typename FanoutPolicy>
46 requires (sizeof...(Nodes) == 0) &&
49 [[nodiscard]] constexpr auto root(F&& f, FanoutPolicy&& fanout_policy) const& {
51 const Derived*,
52 0,
53 std::decay_t<F>,
54 std::decay_t<FanoutPolicy>,
56 > {
57 static_cast<const Derived*>(this),
58 std::forward<F>(f),
59 std::forward<FanoutPolicy>(fanout_policy),
60 {}
61 };
62 }
63
64 template <typename F, typename AdapterChain>
65 requires (sizeof...(Nodes) == 0) &&
68 [[nodiscard]] constexpr auto root(F&& f, AdapterChain&& adapter_specs) const& {
70 const Derived*,
71 0,
72 std::decay_t<F>,
74 std::decay_t<AdapterChain>
75 > {
76 static_cast<const Derived*>(this),
77 std::forward<F>(f),
78 {},
79 std::forward<AdapterChain>(adapter_specs)
80 };
81 }
82
83 template <typename F, typename FanoutPolicy, typename AdapterChain>
84 requires (sizeof...(Nodes) == 0) &&
88 [[nodiscard]] constexpr auto root(F&& f, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
90 const Derived*,
91 0,
92 std::decay_t<F>,
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<FanoutPolicy>(fanout_policy),
99 std::forward<AdapterChain>(adapter_specs)
100 };
101 }
102
103 template <typename Task>
104 requires (sizeof...(Nodes) == 0) &&
106 [[nodiscard]] constexpr auto root_into(Task&& task) const& {
107 return static_cast<const Derived&>(*this).template node_into<0>(std::forward<Task>(task));
108 }
109
110 template <typename Task, typename FanoutPolicy>
111 requires (sizeof...(Nodes) == 0) &&
114 [[nodiscard]] constexpr auto root_into(Task&& task, FanoutPolicy&& fanout_policy) const& {
115 return static_cast<const Derived&>(*this).template node_into<0>(std::forward<Task>(task), std::forward<FanoutPolicy>(fanout_policy));
116 }
117
118 template <typename F>
119 requires (sizeof...(Nodes) == 0) &&
121 [[nodiscard]] constexpr auto root_into(F&& f) const& {
123 const Derived*,
124 0,
125 std::decay_t<F>,
128 > {
129 static_cast<const Derived*>(this),
130 std::forward<F>(f),
131 {},
132 {}
133 };
134 }
135
136 template <typename F, typename FanoutPolicy>
137 requires (sizeof...(Nodes) == 0) &&
140 [[nodiscard]] constexpr auto root_into(F&& f, FanoutPolicy&& fanout_policy) const& {
142 const Derived*,
143 0,
144 std::decay_t<F>,
145 std::decay_t<FanoutPolicy>,
147 > {
148 static_cast<const Derived*>(this),
149 std::forward<F>(f),
150 std::forward<FanoutPolicy>(fanout_policy),
151 {}
152 };
153 }
154
155 template <typename F, typename AdapterChain>
156 requires (sizeof...(Nodes) == 0) &&
159 [[nodiscard]] constexpr auto root_into(F&& f, AdapterChain&& adapter_specs) const& {
161 const Derived*,
162 0,
163 std::decay_t<F>,
165 std::decay_t<AdapterChain>
166 > {
167 static_cast<const Derived*>(this),
168 std::forward<F>(f),
169 {},
170 std::forward<AdapterChain>(adapter_specs)
171 };
172 }
173
174 template <typename F, typename FanoutPolicy, typename AdapterChain>
175 requires (sizeof...(Nodes) == 0) &&
179 [[nodiscard]] constexpr auto root_into(F&& f, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) const& {
181 const Derived*,
182 0,
183 std::decay_t<F>,
184 std::decay_t<FanoutPolicy>,
185 std::decay_t<AdapterChain>
186 > {
187 static_cast<const Derived*>(this),
188 std::forward<F>(f),
189 std::forward<FanoutPolicy>(fanout_policy),
190 std::forward<AdapterChain>(adapter_specs)
191 };
192 }
193
194 template <typename Task>
195 requires (sizeof...(Nodes) == 0) &&
197 [[nodiscard]] constexpr auto root(Task&& task) && {
198 return static_cast<Derived&&>(*this).template node<0>(std::forward<Task>(task));
199 }
200
201 template <typename Task, typename FanoutPolicy>
202 requires (sizeof...(Nodes) == 0) &&
205 [[nodiscard]] constexpr auto root(Task&& task, FanoutPolicy&& fanout_policy) && {
206 return static_cast<Derived&&>(*this).template node<0>(std::forward<Task>(task), std::forward<FanoutPolicy>(fanout_policy));
207 }
208
209 template <typename F>
210 requires (sizeof...(Nodes) == 0) &&
212 [[nodiscard]] constexpr auto root(F&& f) && {
214 Derived,
215 0,
216 std::decay_t<F>,
219 > {
220 static_cast<Derived&&>(*this),
221 std::forward<F>(f),
222 {},
223 {}
224 };
225 }
226
227 template <typename F, typename FanoutPolicy>
228 requires (sizeof...(Nodes) == 0) &&
231 [[nodiscard]] constexpr auto root(F&& f, FanoutPolicy&& fanout_policy) && {
233 Derived,
234 0,
235 std::decay_t<F>,
236 std::decay_t<FanoutPolicy>,
238 > {
239 static_cast<Derived&&>(*this),
240 std::forward<F>(f),
241 std::forward<FanoutPolicy>(fanout_policy),
242 {}
243 };
244 }
245
246 template <typename F, typename AdapterChain>
247 requires (sizeof...(Nodes) == 0) &&
250 [[nodiscard]] constexpr auto root(F&& f, AdapterChain&& adapter_specs) && {
252 Derived,
253 0,
254 std::decay_t<F>,
256 std::decay_t<AdapterChain>
257 > {
258 static_cast<Derived&&>(*this),
259 std::forward<F>(f),
260 {},
261 std::forward<AdapterChain>(adapter_specs)
262 };
263 }
264
265 template <typename F, typename FanoutPolicy, typename AdapterChain>
266 requires (sizeof...(Nodes) == 0) &&
270 [[nodiscard]] constexpr auto root(F&& f, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
272 Derived,
273 0,
274 std::decay_t<F>,
275 std::decay_t<FanoutPolicy>,
276 std::decay_t<AdapterChain>
277 > {
278 static_cast<Derived&&>(*this),
279 std::forward<F>(f),
280 std::forward<FanoutPolicy>(fanout_policy),
281 std::forward<AdapterChain>(adapter_specs)
282 };
283 }
284
285 template <typename Task>
286 requires (sizeof...(Nodes) == 0) &&
288 [[nodiscard]] constexpr auto root_into(Task&& task) && {
289 return static_cast<Derived&&>(*this).template node_into<0>(std::forward<Task>(task));
290 }
291
292 template <typename Task, typename FanoutPolicy>
293 requires (sizeof...(Nodes) == 0) &&
297 return static_cast<Derived&&>(*this).template node_into<0>(std::forward<Task>(task), std::forward<FanoutPolicy>(fanout_policy));
298 }
299
300 template <typename F>
301 requires (sizeof...(Nodes) == 0) &&
303 [[nodiscard]] constexpr auto root_into(F&& f) && {
305 Derived,
306 0,
307 std::decay_t<F>,
310 > {
311 static_cast<Derived&&>(*this),
312 std::forward<F>(f),
313 {},
314 {}
315 };
316 }
317
318 template <typename F, typename FanoutPolicy>
319 requires (sizeof...(Nodes) == 0) &&
322 [[nodiscard]] constexpr auto root_into(F&& f, FanoutPolicy&& fanout_policy) && {
324 Derived,
325 0,
326 std::decay_t<F>,
327 std::decay_t<FanoutPolicy>,
329 > {
330 static_cast<Derived&&>(*this),
331 std::forward<F>(f),
332 std::forward<FanoutPolicy>(fanout_policy),
333 {}
334 };
335 }
336
337 template <typename F, typename AdapterChain>
338 requires (sizeof...(Nodes) == 0) &&
341 [[nodiscard]] constexpr auto root_into(F&& f, AdapterChain&& adapter_specs) && {
343 Derived,
344 0,
345 std::decay_t<F>,
347 std::decay_t<AdapterChain>
348 > {
349 static_cast<Derived&&>(*this),
350 std::forward<F>(f),
351 {},
352 std::forward<AdapterChain>(adapter_specs)
353 };
354 }
355
356 template <typename F, typename FanoutPolicy, typename AdapterChain>
357 requires (sizeof...(Nodes) == 0) &&
361 [[nodiscard]] constexpr auto root_into(F&& f, FanoutPolicy&& fanout_policy, AdapterChain&& adapter_specs) && {
363 Derived,
364 0,
365 std::decay_t<F>,
366 std::decay_t<FanoutPolicy>,
367 std::decay_t<AdapterChain>
368 > {
369 static_cast<Derived&&>(*this),
370 std::forward<F>(f),
371 std::forward<FanoutPolicy>(fanout_policy),
372 std::forward<AdapterChain>(adapter_specs)
373 };
374 }
375};
376
377} // namespace yorch::detail
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
constexpr auto task(F &&f)
Definition core.hpp:207
constexpr auto root_into(Task &&task, FanoutPolicy &&fanout_policy) &&
constexpr auto root(F &&f, AdapterChain &&adapter_specs) &&
constexpr auto root_into(F &&f, FanoutPolicy &&fanout_policy) const &
constexpr auto root(F &&f, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto root_into(F &&f, AdapterChain &&adapter_specs) const &
constexpr auto root_into(Task &&task, FanoutPolicy &&fanout_policy) const &
constexpr auto root_into(F &&f, FanoutPolicy &&fanout_policy) &&
constexpr auto root(F &&f, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto root_into(F &&f, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) &&
constexpr auto root_into(F &&f, FanoutPolicy &&fanout_policy, AdapterChain &&adapter_specs) const &
constexpr auto root(F &&f, FanoutPolicy &&fanout_policy) &&
constexpr auto root(F &&f, FanoutPolicy &&fanout_policy) const &
constexpr auto root(F &&f, AdapterChain &&adapter_specs) const &
constexpr auto root(Task &&task, FanoutPolicy &&fanout_policy) const &
constexpr auto root_into(F &&f, AdapterChain &&adapter_specs) &&
constexpr auto root(Task &&task, FanoutPolicy &&fanout_policy) &&