acme
Foundational cross-platform layer of the ca2 framework
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
6inline ::payload& task_property(const ::atom& atom);
7
8
9
10
11class CLASS_DECL_ACME ___keep_task_payload
12{
13public:
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
40inline ___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 \
50synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
51 \
52if (flag) \
53{ \
54\
55 ret; \
56\
57} \
58\
59auto COUNTER_TOKEN(__task_guard_task_ret) = keep(flag); \
60\
61synchronouslock.unlock()
62
63#define __task_guard(flag) __task_guard_ret(flag, return)
64
65
66#define __guard_wait_ret(flag, ret) \
67 \
68synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
69 \
70while (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\
88auto COUNTER_TOKEN(__guard_wait_ret) = keep(&flag); \
89\
90synchronouslock.unlock()
91
92#define __guard_wait(flag) __task_guard_ret(flag, return)
93
94
95
96#define __task_guard_ret(flag, ret) \
97 \
98synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
99 \
100if (flag) \
101{ \
102\
103 ret; \
104\
105} \
106\
107auto COUNTER_TOKEN(__task_guard_task_ret) = keep(flag); \
108\
109synchronouslock.unlock()
110
111#define __task_guard(flag) __task_guard_ret(flag, return)
112
113
114#define __guard_wait_ret(flag, ret) \
115 \
116synchronous_lock synchronouslock(this->synchronization(), DEFAULT_SYNCHRONOUS_LOCK_SUFFIX); \
117 \
118while (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\
136auto COUNTER_TOKEN(__guard_wait_ret) = keep(&flag); \
137\
138synchronouslock.unlock()
139
140#define __guard_wait(flag) __task_guard_ret(flag, return)
141
Definition task_payload.h:12
Definition atom.h:237
Definition payload.h:54