6#include "../../detail/bind/tasks.hpp"
7#include "../../detail/bind/traits.hpp"
8#include "../adapters.hpp"
12template <
typename F,
typename AdapterChain>
13struct task_into_binder;
15template <
typename F,
typename AdapterChain>
16struct task_forward_prev_binder;
18template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
19struct task_member_receiver_binder;
21template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
22struct task_forward_prev_member_receiver_binder;
24template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
25struct task_into_member_receiver_binder;
27template <
typename F,
typename AdapterChain>
32 template <
typename... Specs>
40 template <
typename... Specs>
49template <
typename F,
typename AdapterChain>
56 template <
typename... Specs>
60 yorch::bind_into<output_type>(
func, std::forward<Specs>(specs)...),
64 template <
typename... Specs>
68 yorch::bind_into<output_type>(std::move(
func), std::forward<Specs>(specs)...),
73template <
typename F,
typename AdapterChain>
78 template <
typename... Specs>
83 static_assert(!std::is_void_v<output_type>,
84 "yorch::task_forward_prev(...) requires exactly one prev-access binding");
87 yorch::bind_forward_prev<output_type>(
func, std::forward<Specs>(specs)...),
91 template <
typename... Specs>
96 static_assert(!std::is_void_v<output_type>,
97 "yorch::task_forward_prev(...) requires exactly one prev-access binding");
100 yorch::bind_forward_prev<output_type>(std::move(
func), std::forward<Specs>(specs)...),
105template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
111 template <
typename... Specs>
119 template <
typename... Specs>
128template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
134 template <
typename... Specs>
139 std::decay_t<ReceiverSpec>,
140 std::decay_t<Specs>...>;
143 !std::is_void_v<output_type>,
144 "yorch::task_forward_prev_member(...) requires exactly one prev-access binding across receiver and member-function parameters");
147 yorch::bind_forward_prev_member<output_type>(
150 std::forward<Specs>(specs)...),
154 template <
typename... Specs>
159 std::decay_t<ReceiverSpec>,
160 std::decay_t<Specs>...>;
163 !std::is_void_v<output_type>,
164 "yorch::task_forward_prev_member(...) requires exactly one prev-access binding across receiver and member-function parameters");
167 yorch::bind_forward_prev_member<output_type>(
170 std::forward<Specs>(specs)...),
175template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
183 template <
typename... Specs>
187 yorch::bind_into_member<output_type>(
190 std::forward<Specs>(specs)...),
194 template <
typename... Specs>
198 yorch::bind_into_member<output_type>(
201 std::forward<Specs>(specs)...),
215template <
typename F,
typename AdapterChain>
216constexpr auto task(F&& f, AdapterChain&& adapter_specs)
221 std::decay_t<AdapterChain>
224 std::forward<AdapterChain>(adapter_specs)
228template <
typename F,
typename ReceiverSpec>
235 std::decay_t<ReceiverSpec>,
239 std::forward<ReceiverSpec>(receiver_spec),
244template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
245constexpr auto task_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs)
252 std::decay_t<ReceiverSpec>,
253 std::decay_t<AdapterChain>
256 std::forward<ReceiverSpec>(receiver_spec),
257 std::forward<AdapterChain>(adapter_specs)
270template <
typename F,
typename AdapterChain>
271constexpr auto task_into(F&& f, AdapterChain&& adapter_specs)
276 std::decay_t<AdapterChain>
279 std::forward<AdapterChain>(adapter_specs)
292template <
typename F,
typename AdapterChain>
298 std::decay_t<AdapterChain>
301 std::forward<AdapterChain>(adapter_specs)
305template <
typename F,
typename ReceiverSpec>
312 std::decay_t<ReceiverSpec>,
316 std::forward<ReceiverSpec>(receiver_spec),
321template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
329 std::decay_t<ReceiverSpec>,
330 std::decay_t<AdapterChain>
333 std::forward<ReceiverSpec>(receiver_spec),
334 std::forward<AdapterChain>(adapter_specs)
338template <
typename F,
typename ReceiverSpec>
345 std::decay_t<ReceiverSpec>,
349 std::forward<ReceiverSpec>(receiver_spec),
354template <
typename F,
typename ReceiverSpec,
typename AdapterChain>
355constexpr auto task_into_member(F&& f, ReceiverSpec&& receiver_spec, AdapterChain&& adapter_specs)
362 std::decay_t<ReceiverSpec>,
363 std::decay_t<AdapterChain>
366 std::forward<ReceiverSpec>(receiver_spec),
367 std::forward<AdapterChain>(adapter_specs)
typename direct_out_payload< T >::type direct_out_payload_t
typename forward_prev_unique_prev_payload< Specs... >::type forward_prev_unique_prev_payload_t
constexpr auto task_member(F &&f, ReceiverSpec &&receiver_spec)
constexpr void bind_member(F &&)
constexpr auto task_forward_prev_member(F &&f, ReceiverSpec &&receiver_spec)
constexpr auto bind(F &&f, Specs &&... specs)
Creates a bound_task from a callable and matching argument specs.
constexpr auto task_forward_prev(F &&f)
constexpr auto apply_adapters(Task &&task, const adapter_chain<> &)
constexpr auto task_into_member(F &&f, ReceiverSpec &&receiver_spec)
constexpr auto task(F &&f)
constexpr auto task_into(F &&f)
constexpr auto operator()(Specs &&... specs) &&
constexpr auto operator()(Specs &&... specs) const &
AdapterChain adapter_specs
AdapterChain adapter_specs
constexpr auto operator()(Specs &&... specs) const &
constexpr auto operator()(Specs &&... specs) &&
AdapterChain adapter_specs
constexpr auto operator()(Specs &&... specs) const &
constexpr auto operator()(Specs &&... specs) &&
ReceiverSpec receiver_spec
detail::direct_out_payload_t< detail::last_arg_t< F > > output_type
constexpr auto operator()(Specs &&... specs) &&
constexpr auto operator()(Specs &&... specs) const &
AdapterChain adapter_specs
AdapterChain adapter_specs
constexpr auto operator()(Specs &&... specs) &&
constexpr auto operator()(Specs &&... specs) const &
detail::direct_out_payload_t< detail::member_last_arg_t< F > > output_type
ReceiverSpec receiver_spec
AdapterChain adapter_specs
ReceiverSpec receiver_spec
constexpr auto operator()(Specs &&... specs) &&
constexpr auto operator()(Specs &&... specs) const &