8#include "../../bind/tasks.hpp"
9#include "../../task_adapters/catch_as_failure.hpp"
10#include "../../task_adapters/retry.hpp"
28 lhs.exclusive_prev_access_count +=
rhs.exclusive_prev_access_count;
29 lhs.borrow_prev_count +=
rhs.borrow_prev_count;
30 lhs.borrow_prev_mut_count +=
rhs.borrow_prev_mut_count;
31 lhs.copy_prev_count +=
rhs.copy_prev_count;
32 lhs.consume_prev_count +=
rhs.consume_prev_count;
36template <
typename Spec>
45 ++summary.exclusive_prev_access_count;
49 ++summary.borrow_prev_count;
53 ++summary.borrow_prev_mut_count;
57 ++summary.copy_prev_count;
61 ++summary.consume_prev_count;
69 return summary.exclusive_prev_access_count == 0 ||
70 (summary.exclusive_prev_access_count == 1 &&
71 summary.prev_access_count == 1);
74template <
typename Task>
77template <
typename F,
typename...
Specs>
83 static constexpr bool has_receiver =
false;
85 template <std::
size_t I>
89template <
typename F,
typename T,
typename...
Specs>
95 static constexpr bool has_receiver =
false;
97 template <std::
size_t I>
101template <
typename F,
typename T,
typename...
Specs>
107 static constexpr bool has_receiver =
false;
109 template <std::
size_t I>
119 static constexpr bool has_receiver =
true;
121 template <std::
size_t I>
131 static constexpr bool has_receiver =
true;
133 template <std::
size_t I>
143 static constexpr bool has_receiver =
true;
145 template <std::
size_t I>
149template <
typename View, std::size_t...
I>
151 std::index_sequence<I...>) {
152 using specs_tuple =
typename View::specs_tuple;
154 if constexpr (View::has_receiver) {
157 typename View::receiver_spec,
158 typename View::callable_type>) &&
161 std::tuple_element_t<I, specs_tuple>,
162 typename View::template
arg<I>>) &&
167 std::tuple_element_t<I, specs_tuple>,
168 typename View::template
arg<I>>) &&
173template <
typename View, std::size_t...
I>
175 std::index_sequence<I...>) {
176 using specs_tuple =
typename View::specs_tuple;
180 if constexpr (View::has_receiver) {
194template <
typename Task>
200template <
typename Task>
206 std::make_index_sequence<
207 std::tuple_size_v<typename view::specs_tuple>> {});
211 std::make_index_sequence<
212 std::tuple_size_v<typename view::specs_tuple>> {}) &&
216template <
typename F,
typename...
Specs>
220template <
typename F,
typename T,
typename...
Specs>
224template <
typename F,
typename T,
typename...
Specs>
231 bound_member_task<F, ReceiverSpec, Specs...>> {};
236 bound_member_forward_prev_task<F, ReceiverSpec, T, Specs...>> {};
241 bound_member_output_task<F, ReceiverSpec, T, Specs...>> {};
243template <
typename Task>
251template <
typename Task>
255template <
typename Task,
typename Policy>
259template <
typename Task,
typename Policy>
268template <
typename Task>
270 : std::bool_constant<
271 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::valid> {};
273template <
typename Task>
275 : std::bool_constant<
276 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::summary.prev_access_count != 0> {};
278template <
typename Task>
280 : std::bool_constant<
281 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::summary
282 .exclusive_prev_access_count != 0> {};
284template <
typename Task>
286 : std::bool_constant<
287 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::summary.consume_prev_count != 0> {};
289template <
typename Task>
291 : std::bool_constant<
292 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::summary.borrow_prev_count != 0> {};
294template <
typename Task>
296 : std::bool_constant<
297 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::summary
298 .borrow_prev_mut_count != 0> {};
300template <
typename Task>
302 : std::bool_constant<
303 task_prev_access_traits_impl<std::remove_cvref_t<Task>>::summary.copy_prev_count != 0> {};
305template <
typename Task>
309template <
typename Task>
313template <
typename Task>
317template <
typename Task>
321template <
typename Task>
325template <
typename Task>
329template <
typename Task>
constexpr bool prev_access_summary_is_locally_valid(const prev_access_summary &summary) noexcept
typename member_function_traits< std::remove_cvref_t< F > >::template arg< I > member_nth_arg_t
constexpr bool task_uses_copy_prev_v
consteval prev_access_summary summarize_prev_access_spec()
constexpr bool is_prev_access_spec_v
consteval bool task_binding_prev_access_bindings_valid_impl(std::index_sequence< I... >)
typename function_traits< std::remove_cvref_t< F > >::template arg< I > nth_arg_t
constexpr bool task_uses_prev_access_v
constexpr bool task_uses_exclusive_prev_access_v
constexpr bool member_receiver_prev_access_valid_v
constexpr bool task_uses_borrow_prev_mut_v
constexpr prev_access_summary merge_prev_access_summary(prev_access_summary lhs, const prev_access_summary &rhs) noexcept
constexpr bool prev_access_binding_valid_v
constexpr bool task_uses_borrow_prev_v
constexpr bool task_uses_consume_prev_v
consteval prev_access_summary summarize_task_binding_impl(std::index_sequence< I... >)
constexpr bool is_adapter_descriptor_v
constexpr bool task_prev_access_valid_v
Bound direct-output task composed of a member function, receiver spec, and non-output parameter specs...
Bound executable task composed of a member function, receiver spec, and per-parameter specs.
Bound direct-output task that writes its payload into a provided slot.
Bound executable task composed of a callable and per-parameter specs.
Exception-catching adapter for tasks that rely on the default failure mapping.
Exception-catching adapter for tasks with a user-supplied fallback policy.
static constexpr prev_access_summary summary
static constexpr bool valid
std::size_t borrow_prev_mut_count
std::size_t consume_prev_count
std::size_t borrow_prev_count
std::size_t prev_access_count
std::size_t copy_prev_count
std::size_t exclusive_prev_access_count
std::remove_cvref_t< F > callable_type
std::tuple< Specs... > specs_tuple
nth_arg_t< I, callable_type > arg
member_nth_arg_t< I, callable_type > arg
std::tuple< Specs... > specs_tuple
std::remove_cvref_t< ReceiverSpec > receiver_spec
std::remove_cvref_t< F > callable_type
member_nth_arg_t< I, callable_type > arg
std::remove_cvref_t< ReceiverSpec > receiver_spec
std::remove_cvref_t< F > callable_type
std::tuple< Specs... > specs_tuple
std::remove_cvref_t< ReceiverSpec > receiver_spec
member_nth_arg_t< I, callable_type > arg
std::remove_cvref_t< F > callable_type
std::tuple< Specs... > specs_tuple
std::remove_cvref_t< F > callable_type
nth_arg_t< I, callable_type > arg
std::tuple< Specs... > specs_tuple
std::tuple< Specs... > specs_tuple
std::remove_cvref_t< F > callable_type
nth_arg_t< I, callable_type > arg
static constexpr bool valid
static constexpr prev_access_summary summary
static constexpr prev_access_summary summary
static constexpr bool valid
Retry adapter that re-invokes a task when it returns retry.