YOrch 1.0.0
Loading...
Searching...
No Matches
traits.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <type_traits>
4
5#include "../detail/slots/policy.hpp"
6#include "../detail/task/traits.hpp"
7#include "../result.hpp"
8
9namespace yorch::detail {
10
25template <typename Task, typename = void>
27
40template <typename Task>
41struct task_raw_result<Task, std::void_t<typename std::remove_cvref_t<Task>::raw_result_type>> {
42 using type = typename std::remove_cvref_t<Task>::raw_result_type;
43};
44
52template <typename Task>
54
55template <typename Task>
57 requires {
59 };
60
61template <typename Task, typename = void>
63
64template <typename Task>
66 Task,
67 std::void_t<typename std::remove_cvref_t<Task>::output_type>
68> {
69 using type = typename std::remove_cvref_t<Task>::output_type;
70};
71
72template <typename Task, typename = void>
73struct has_plan_declared_task_output : std::false_type {};
74
75template <typename Task>
77 Task,
78 std::void_t<typename std::remove_cvref_t<Task>::output_type>
79> : std::true_type {};
80
81template <typename R>
83 using type = R;
84};
85
86template <>
90
91template <typename T>
93 using type = T;
94};
95
96template <typename R>
98 static_assert(!std::is_reference_v<R>,
99 "Task raw return references are not supported as parent payloads");
100
102};
103
104template <>
106 using type = void;
107};
108
109template <typename R>
111
112template <typename Task, typename = void>
116
117template <typename Task>
119 Task,
120 std::void_t<typename plan_declared_task_output<Task>::type>
121> {
123};
124
125template <typename Task>
127
128template <typename Task, typename = void>
130private:
131 using raw_t = task_raw_result_t<Task>;
132
133public:
135 std::is_void_v<raw_t> ||
136 std::is_same_v<raw_t, step_result>
139};
140
141template <typename Task>
151
152template <typename Task>
155
156template <typename Task, typename = void>
158private:
159 using raw_t = task_raw_result_t<Task>;
160
161public:
162 static constexpr slot_logical_policy value =
163 std::is_void_v<raw_t> ||
164 std::is_same_v<raw_t, step_result>
169};
170
181template <typename Task>
183 Task,
184 std::void_t<typename plan_declared_task_output<Task>::type>
185> {
186 static constexpr slot_logical_policy value =
190};
191
192template <typename Task>
195
196template <typename Node>
198 requires {
199 typename Node::task_type;
200 } &&
202
203template <typename... Nodes>
206
207} // namespace yorch::detail
typename task_output_for< Task >::type task_output_for_t
Definition traits.hpp:126
output_storage_mode
Describes how a node's logical output is backed at runtime.
Definition policy.hpp:46
constexpr detail::output_storage_mode task_output_storage_mode_v
Definition traits.hpp:153
constexpr slot_logical_policy task_slot_logical_policy_v
Definition traits.hpp:193
typename task_output_type< R >::type task_output_t
Definition traits.hpp:110
typename task_raw_result< Task >::type task_raw_result_t
Convenience alias for a task's raw return type.
Definition traits.hpp:53
slot_logical_policy
Node-local slot semantics inferred from a task's result protocol.
Definition policy.hpp:17
constexpr bool is_adapter_descriptor_v
Definition adapters.hpp:63
task_output_t< task_raw_result_t< Task > > type
Definition traits.hpp:114
static constexpr detail::output_storage_mode value
Definition traits.hpp:134
typename task_output_type_impl< std::remove_cv_t< R > >::type type
Definition traits.hpp:101
Compile-time trait that extracts a task's raw return type.
Definition traits.hpp:26
static constexpr slot_logical_policy value
Definition traits.hpp:162
Represents the basic outcome of a task step.
Definition result.hpp:42
Represents a step result that may carry a produced value.
Definition result.hpp:96