| 2226 | */ |
| 2227 | template <typename T, typename F, typename R, bool submit, typename N = std::conditional_t<submit, multi_future<R>, void>> |
| 2228 | [[nodiscard]] N enqueue_sequence(const T first_index, const T index_after_last, F&& sequence, const priority_t priority = 0) |
| 2229 | { |
| 2230 | if (index_after_last > first_index) |
| 2231 | { |
| 2232 | using sequence_task_t = sequence_task<T, F, R>; |
| 2233 | const std::shared_ptr<std::decay_t<F>> sequence_ptr = std::make_shared<std::decay_t<F>>(std::forward<F>(sequence)); |
| 2234 | std::vector<std::conditional_t<submit, sequence_task_t, task_t>> all_tasks; |
| 2235 | all_tasks.reserve(static_cast<std::size_t>(index_after_last - first_index)); |
| 2236 | for (T i = first_index; i < index_after_last; ++i) |
| 2237 | all_tasks.emplace_back(sequence_task_t{sequence_ptr, i}); |
| 2238 | if constexpr (submit) |
| 2239 | return submit_bulk(all_tasks, priority); |
| 2240 | else |
| 2241 | detach_bulk(all_tasks, priority); |
| 2242 | } |
| 2243 | return N(); |
| 2244 | } |
| 2245 | |
| 2246 | /** |
| 2247 | * @brief Pop a task from the queue. |
nothing calls this directly
no test coverage detected