IceShard 1
A personal game engine project, with development focused on 2D/2.5D games.
Loading...
Searching...
No Matches
task_utils.hxx
Go to the documentation of this file.
1
3
4#pragma once
5#include <ice/task.hxx>
6#include <ice/task_types.hxx>
9#include <ice/span.hxx>
10#include <ice/profiler.hxx>
11#include <ice/expected.hxx>
12
13namespace ice
14{
15
16 // Awaiters
17
18 // Resumes the current task on a different thread
19 inline auto resume_on(ice::TaskScheduler& scheduler) noexcept;
20
21 // Executes tasks (1) on this thread, waits for finish and resumes (2) on given thread
22
23 inline auto await_tasks(ice::Span<ice::Task<>> tasks) noexcept -> ice::Task<>;
24
25 auto await_on(ice::Task<> task, ice::TaskScheduler& resumer) noexcept -> ice::Task<>;
26
27 auto await_on(ice::Span<ice::Task<>> tasks, ice::TaskScheduler& resumer) noexcept -> ice::Task<>;
28
29 template<typename T>
30 inline auto await_on(ice::Task<T> task, ice::TaskScheduler& resumer) noexcept -> ice::Task<T>;
31
32 // Schedules (2) tasks (1) and resumes after all have been finished (resuming on unspecified thread)
33
34 auto await_scheduled(ice::Task<> task, ice::TaskScheduler& scheduler) noexcept -> ice::Task<>;
35
37
38 template<typename T>
39 inline auto await_scheduled(ice::Task<T> task, ice::TaskScheduler& scheduler) noexcept -> ice::Task<T>;
40
41 // Schedules (2) queue (1) and resumes after all have been scheduled (tasks might not have started or finished, resuming on scheduler thread)
42
44
45 auto await_scheduled_queue(ice::TaskQueue& queue, void* result_ptr, ice::TaskScheduler& scheduler) noexcept -> ice::Task<bool>;
46
47 // Schedules (2) tasks (1) and resumes on resumer (3) after all have finished
48
50
51 template<typename T>
52 inline auto await_scheduled_on(ice::Task<> task, ice::TaskScheduler& scheduler, ice::TaskScheduler& resumer) noexcept -> ice::Task<T>;
53
55
57
58 auto await_scheduled_queue_on(ice::TaskQueue& queue, void* result_ptr, ice::TaskScheduler& scheduler, ice::TaskScheduler& resumer) noexcept -> ice::Task<>;
59
60
61 // Detached schedulers
62
63 bool execute_task(ice::Task<> task) noexcept;
64
65 bool execute_tasks(ice::Span<ice::Task<>> tasks) noexcept;
66
67 // Schedules (2) tasks (1) and resumes after all have been scheduled (tasks might not have finished, resuming on origin thread)
68
69 bool schedule_task(ice::Task<> task, ice::TaskScheduler& scheduler) noexcept;
70
71 bool schedule_tasks(ice::Span<ice::Task<>> tasks, ice::TaskScheduler& scheduler) noexcept;
72
73 // Schedules (2) queue (1) and resumes after all have been scheduled (tasks might not have finished, resuming on origin thread)
74
76
77 bool schedule_queue(ice::TaskQueue& queue, void* result_ptr, ice::TaskScheduler& scheduler) noexcept;
78
79
80 // Waiters
81
82 void wait_for(ice::Task<> task) noexcept;
83 void wait_for(ice::Span<ice::Task<>> tasks) noexcept;
84 void wait_for_scheduled(ice::Task<> task, ice::TaskScheduler& scheduler) noexcept;
86
87 template<typename T>
88 inline auto wait_for_result(ice::Task<T> task) noexcept -> T;
89 template<typename T>
90 inline void wait_for_result(ice::Task<T> task, T& out_result) noexcept;
91 template<typename T>
92 inline void wait_for_result(ice::Span<ice::Task<T>> tasks, ice::Span<T> out_results) noexcept;
93 template<typename T>
94 inline void wait_for_result_scheduled(ice::Task<T> task, ice::TaskScheduler& scheduler, T& out_result) noexcept;
95 template<typename T>
96 inline void wait_for_result_scheduled(ice::Span<ice::Task<T>> tasks, ice::TaskScheduler& scheduler, ice::Span<T> out_results) noexcept;
97
104
105
107
108 template<typename T>
109 inline auto wait_for_expected(ice::TaskExpected<T> task) noexcept -> ice::Expected<T>;
110
112
113
114 [[deprecated("To be replaced at a later time")]]
115 auto await_filtered_queue_on(ice::TaskQueue& queue, ice::TaskScheduler& resumer, FnTaskQueueFilter filter, void* userdata = nullptr) noexcept -> ice::Task<bool>;
116
117} // namespace ice
118
119#include "impl/task_utils.inl"
Definition expected.hxx:16
Definition sync_manual_events.hxx:32
Definition sync_manual_events.hxx:12
Definition task.hxx:12
Definition task_queue.hxx:13
Definition task_scheduler.hxx:13
Definition queue.hxx:111
SPDX-License-Identifier: MIT.
Definition array.hxx:12
bool execute_tasks(ice::Span< ice::Task<> > tasks) noexcept
auto await_scheduled_queue_on(ice::TaskQueue &queue, ice::TaskScheduler &scheduler, ice::TaskScheduler &resumer) noexcept -> ice::Task<>
Span(ice::Span< T > &&) noexcept -> Span< T >
auto resume_on(ice::TaskScheduler &scheduler) noexcept
Definition task_utils.inl:25
auto wait_for_expected(ice::TaskExpected< T > task) noexcept -> ice::Expected< T >
Definition task_utils.inl:128
void manual_wait_for(ice::ManualResetEvent &evnt, ice::Task<> task) noexcept
void wait_for_result_scheduled(ice::Task< T > task, ice::TaskScheduler &scheduler, T &out_result) noexcept
Definition task_utils.inl:99
bool execute_task(ice::Task<> task) noexcept
auto await_tasks(ice::Span< ice::Task<> > tasks) noexcept -> ice::Task<>
Definition task_utils.inl:30
auto await_scheduled_on(ice::Task<> task, ice::TaskScheduler &scheduler, ice::TaskScheduler &resumer) noexcept -> ice::Task< T >
Definition task_utils.inl:55
auto await_filtered_queue_on(ice::TaskQueue &queue, ice::TaskScheduler &resumer, FnTaskQueueFilter filter, void *userdata=nullptr) noexcept -> ice::Task< bool >
bool schedule_tasks(ice::Span< ice::Task<> > tasks, ice::TaskScheduler &scheduler) noexcept
void wait_for(ice::Task<> task) noexcept
auto await_scheduled_queue(ice::TaskQueue &queue, ice::TaskScheduler &scheduler) noexcept -> ice::Task< bool >
bool schedule_task(ice::Task<> task, ice::TaskScheduler &scheduler) noexcept
bool schedule_queue(ice::TaskQueue &queue, ice::TaskScheduler &scheduler) noexcept
auto wait_for_result(ice::Task< T > task) noexcept -> T
Definition task_utils.inl:63
void wait_for_scheduled(ice::Task<> task, ice::TaskScheduler &scheduler) noexcept
bool(*)(ice::TaskAwaitableParams params, void *userdata) noexcept FnTaskQueueFilter
Definition task_awaitable.hxx:52
void manual_wait_for_scheduled(ice::ManualResetEvent &evnt, ice::Task<> task, ice::TaskScheduler &scheduler) noexcept
auto await_on(ice::Task< T > task, ice::TaskScheduler &resumer) noexcept -> ice::Task< T >
Definition task_utils.inl:39
auto await_scheduled(ice::Task< T > task, ice::TaskScheduler &scheduler) noexcept -> ice::Task< T >
Definition task_utils.inl:47
A view into an array of objects laid out in contiguous memory.
Definition span.hxx:17
Definition task_expected.hxx:12