18 template<
typename>
typename... Exts,
19 template<
typename...>
typename Cont = std::initializer_list
24 for (
auto& task : tasks)
25 result <<
co_await task;
30 template<
typename>
typename... Exts,
31 template<
typename...>
typename Cont = std::initializer_list
35 for (
auto& task : tasks)
42 typename... MkTaskArgs,
43 typename Task = std::invoke_result_t<F&,
44 std::add_rvalue_reference_t<typename std::decay_t<Inputs>::value_type>,
47 bool IsVoid = std::is_same_v<typename Task::ResultType_t, void>
49 auto InParallel (Inputs inputs, F mkTask, MkTaskArgs&&... mkTaskArgs) ->
52 typename Task::template ReplaceResult_t<void>,
53 typename Task::template ApplyResult_t<QVector>
57 for (
auto&& input : inputs)
58 tasks << std::invoke (mkTask, std::move (input), std::forward<MkTaskArgs> (mkTaskArgs)...);
61 for (
const auto& task : tasks)
65 QVector<typename Task::ResultType_t> result;
66 for (
const auto& task : tasks)
67 result <<
co_await task;
72 template<
typename... Ts,
template<
typename>
typename... Exts>
75 co_return std::tuple<Ts...> {
co_await tasks... };
78 auto NCopies (
size_t count,
auto taskFactory, std::function<
void ()> finalizer = {})
79 ->
decltype (taskFactory ())::template ApplyResult_t<QVector>
80 requires (!std::is_same_v<void, typename decltype (taskFactory ())::ResultType_t>)
82 using Task_t =
decltype (taskFactory ());
84 QVector<Task_t> tasks;
85 std::generate_n (std::back_inserter (tasks), count, taskFactory);
87 QVector<typename Task_t::ResultType_t> results;
88 for (
auto& task : tasks)
89 results <<
co_await task;
95 auto NCopies (
size_t count,
auto taskFactory, std::function<
void ()> finalizer = {})
96 ->
decltype (taskFactory ())::template ReplaceResult_t<void>
97 requires (std::is_same_v<void, typename decltype (taskFactory ())::ResultType_t>)
99 using Task_t =
decltype (taskFactory ());
101 QVector<Task_t> tasks;
102 std::generate_n (std::back_inserter (tasks), count, taskFactory);
103 for (
auto& task : tasks)
auto NCopies(size_t count, auto taskFactory, std::function< void()> finalizer={}) -> decltype(taskFactory())::template ApplyResult_t< QVector >
Task< QVector< T >, Exts... > InParallel(Cont< Task< T, Exts... > > tasks)