IceShard
1
A personal game engine project, with development focused on 2D/2.5D games.
Toggle main menu visibility
Loading...
Searching...
No Matches
tasks
public
ice
task_scheduler.hxx
Go to the documentation of this file.
1
3
4
#pragma once
5
#include <
ice/task_awaitable.hxx
>
6
#include <
ice/task_queue.hxx
>
7
#include <
ice/task_stage.hxx
>
8
9
namespace
ice
10
{
11
12
class
TaskScheduler
13
{
14
public
:
15
inline
explicit
TaskScheduler
(
ice::TaskQueue
&
queue
)
noexcept
;
16
17
inline
auto
schedule
()
noexcept
;
18
inline
auto
schedule
(
ice::TaskFlags
flags)
noexcept
;
19
inline
auto
schedule_delayed
(
ice::u32
delay_ms)
noexcept
;
20
21
inline
auto
operator
co_await
()
noexcept
;
22
23
private
:
24
struct
SchedulerAwaitable
;
25
26
ice::TaskQueue
& _queue;
27
};
28
29
struct
TaskScheduler::SchedulerAwaitable
30
{
31
SchedulerAwaitable
(
32
ice::TaskQueue
&
queue
,
33
ice::TaskAwaitableParams
params
34
) noexcept
35
:
_awaitable
{ ._params = params }
36
, _queue{
queue
}
37
{ }
38
39
bool
await_ready
() const noexcept
40
{
41
return
false
;
42
}
43
44
auto
await_suspend
(
ice::coroutine_handle<>
coroutine)
noexcept
45
{
46
_awaitable
._coro = coroutine;
47
_queue
.push_back(&
_awaitable
);
48
}
49
50
void
await_resume
() const noexcept
51
{
52
}
53
54
ice::TaskAwaitableBase
_awaitable
;
55
ice::TaskQueue
&
_queue
;
56
};
57
58
inline
TaskScheduler::TaskScheduler
(
ice::TaskQueue
&
queue
) noexcept
59
: _queue{
queue
}
60
{
61
}
62
63
inline
auto
TaskScheduler::schedule
() noexcept
64
{
65
struct
Awaitable :
SchedulerAwaitable
66
{
67
Awaitable(
ice::TaskQueue
&
queue
) noexcept
68
:
SchedulerAwaitable
{
69
queue
,
70
{ .modifier =
TaskAwaitableModifier::Unused
}
71
}
72
{ }
73
};
74
75
return
Awaitable{ _queue };
76
}
77
78
inline
auto
TaskScheduler::schedule
(
ice::TaskFlags
flags)
noexcept
79
{
80
struct
Awaitable :
SchedulerAwaitable
81
{
82
Awaitable(
83
ice::TaskQueue
&
queue
,
84
ice::TaskFlags
flags
85
) noexcept
86
:
SchedulerAwaitable
{
87
queue
,
88
{
89
.modifier =
TaskAwaitableModifier::PriorityFlags
,
90
.task_flags = flags
91
}
92
}
93
{ }
94
};
95
96
return
Awaitable{ _queue, flags };
97
}
98
99
inline
auto
TaskScheduler::schedule_delayed
(
ice::u32
delay_ms)
noexcept
100
{
101
struct
Awaitable :
SchedulerAwaitable
102
{
103
Awaitable(
104
ice::TaskQueue
&
queue
,
105
ice::u32
delay_ms
106
) noexcept
107
:
SchedulerAwaitable
{
108
queue
,
109
{
110
.modifier =
TaskAwaitableModifier::DelayedExecution
,
111
.u32_value = delay_ms
112
}
113
}
114
{ }
115
};
116
117
return
Awaitable{ _queue, delay_ms };
118
}
119
120
inline
auto
TaskScheduler::operator
co_await
()
noexcept
121
{
122
return
schedule
();
123
}
124
125
}
// namespace ice
ice::TaskQueue
Definition
task_queue.hxx:13
ice::TaskScheduler::TaskScheduler
TaskScheduler(ice::TaskQueue &queue) noexcept
Definition
task_scheduler.hxx:58
ice::TaskScheduler::schedule_delayed
auto schedule_delayed(ice::u32 delay_ms) noexcept
Definition
task_scheduler.hxx:99
ice::TaskScheduler::schedule
auto schedule() noexcept
Definition
task_scheduler.hxx:63
ice::queue
Definition
queue.hxx:111
ice
SPDX-License-Identifier: MIT.
Definition
array.hxx:12
ice::TaskAwaitableModifier::DelayedExecution
@ DelayedExecution
Definition
task_awaitable.hxx:15
ice::TaskAwaitableModifier::Unused
@ Unused
Definition
task_awaitable.hxx:13
ice::TaskAwaitableModifier::PriorityFlags
@ PriorityFlags
Definition
task_awaitable.hxx:14
ice::coroutine_handle
std::coroutine_handle< Type > coroutine_handle
Definition
task_types.hxx:42
ice::u32
std::uint32_t u32
Definition
types.hxx:26
ice::TaskAwaitableBase
Definition
task_awaitable.hxx:36
ice::TaskAwaitableParams
Definition
task_awaitable.hxx:21
ice::TaskFlags
Definition
task_flags.hxx:42
ice::TaskScheduler::SchedulerAwaitable
Definition
task_scheduler.hxx:30
ice::TaskScheduler::SchedulerAwaitable::SchedulerAwaitable
SchedulerAwaitable(ice::TaskQueue &queue, ice::TaskAwaitableParams params) noexcept
Definition
task_scheduler.hxx:31
ice::TaskScheduler::SchedulerAwaitable::await_suspend
auto await_suspend(ice::coroutine_handle<> coroutine) noexcept
Definition
task_scheduler.hxx:44
ice::TaskScheduler::SchedulerAwaitable::_queue
ice::TaskQueue & _queue
Definition
task_scheduler.hxx:55
ice::TaskScheduler::SchedulerAwaitable::_awaitable
ice::TaskAwaitableBase _awaitable
Definition
task_scheduler.hxx:54
ice::TaskScheduler::SchedulerAwaitable::await_resume
void await_resume() const noexcept
Definition
task_scheduler.hxx:50
ice::TaskScheduler::SchedulerAwaitable::await_ready
bool await_ready() const noexcept
Definition
task_scheduler.hxx:39
task_awaitable.hxx
task_queue.hxx
task_stage.hxx
Generated by
1.18.0