acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
task_payload.h
1
// Created by camilo on 2022-06-09 11:10 BRT <3ThomasBorregaardSorensen!! and Mummi and bilbo!!
2
#pragma once
3
4
5
6
inline ::payload& task_property(const ::atom&
atom
);
7
8
9
10
11
class
CLASS_DECL_ACME ___keep_task_payload
12
{
13
public
:
14
15
16
::atom
id();
17
::payload
m_payload;
18
19
20
___keep_task_payload(const ::atom&
atom
) :
21
id()(
atom
),
22
m_payload(task_property(
atom
))
23
{
24
25
26
}
27
28
29
~___keep_task_payload()
30
{
31
32
task_property(
id
()) = m_payload;
33
34
}
35
36
37
};
38
39
40
inline
___keep_task_payload
keep_task_payload(const ::atom&
atom
)
41
{
42
43
return
atom
;
44
45
}
46
47
48
#define __task_guard_ret(flag, ret) \
49
\
50
synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
51
\
52
if (flag) \
53
{ \
54
\
55
ret; \
56
\
57
} \
58
\
59
auto COUNTER_TOKEN(__task_guard_task_ret) = keep(flag); \
60
\
61
synchronouslock.unlock()
62
63
#define __task_guard(flag) __task_guard_ret(flag, return)
64
65
66
#define __guard_wait_ret(flag, ret) \
67
\
68
synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
69
\
70
while (flag) \
71
{ \
72
\
73
\
74
synchronouslock.unlock(); \
75
\
76
if (!task_sleep(100_ms)) \
77
{\
78
\
79
ret; \
80
\
81
} \
82
\
83
synchronouslock.lock(); \
84
\
85
\
86
} \
87
\
88
auto COUNTER_TOKEN(__guard_wait_ret) = keep(&flag); \
89
\
90
synchronouslock.unlock()
91
92
#define __guard_wait(flag) __task_guard_ret(flag, return)
93
94
95
96
#define __task_guard_ret(flag, ret) \
97
\
98
synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
99
\
100
if (flag) \
101
{ \
102
\
103
ret; \
104
\
105
} \
106
\
107
auto COUNTER_TOKEN(__task_guard_task_ret) = keep(flag); \
108
\
109
synchronouslock.unlock()
110
111
#define __task_guard(flag) __task_guard_ret(flag, return)
112
113
114
#define __guard_wait_ret(flag, ret) \
115
\
116
synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
117
\
118
while (flag) \
119
{ \
120
\
121
\
122
synchronouslock.unlock(); \
123
\
124
if (!task_sleep(100_ms)) \
125
{\
126
\
127
ret; \
128
\
129
} \
130
\
131
synchronouslock.lock(); \
132
\
133
\
134
} \
135
\
136
auto COUNTER_TOKEN(__guard_wait_ret) = keep(&flag); \
137
\
138
synchronouslock.unlock()
139
140
#define __guard_wait(flag) __task_guard_ret(flag, return)
141
___keep_task_payload
Definition
task_payload.h:12
atom
Definition
atom.h:237
payload
Definition
payload.h:54
parallelization
task_payload.h
Generated by
1.17.0