55#include "nodes/Thread.h"
66#include "nodes/Ticker.h"
77#include "nodes/Timer.h"
8-
9- // ========= macro =========
10- // широковещательное событие
11- #define LP_BROADCAST (hash_t)0
12-
13- // отправить событие
14- #define LP_SEND_EVENT (id , data ) Looper.sendEvent(LPH(id), data)
15-
16- // отложить отправку события
17- #define LP_PUSH_EVENT (id , data ) Looper.pushEvent(LPH(id), data)
18-
19- #define LP_MAKE (type , ...) static type _LP_CONCAT(__loop_obj_, __COUNTER__)(__VA_ARGS__)
20- #define LP_MAKE_ (id , type , ...) static type _LP_CONCAT(__loop_obj_, __COUNTER__)(LPH(id), __VA_ARGS__)
21- #define LP_NEW (type , ...) new type(__VA_ARGS__)
22- #define LP_NEW_ (id , type , ...) new type(LPH(id), __VA_ARGS__)
23-
24- // LISTENER
25- #define LP_LISTENER_ (id , ...) LP_MAKE_(id, LoopListener, __VA_ARGS__)
26-
27- // TICKER
28- #define LP_TICKER (...) LP_MAKE(LoopTicker, __VA_ARGS__)
29- #define LP_TICKER_ (id , ...) LP_MAKE_(id, LoopTicker, __VA_ARGS__)
30-
31- // TIMER
32- #define LP_TIMER (ms , ...) LP_MAKE(LoopTimer, ms, __VA_ARGS__)
33- #define LP_TIMER_ (id , ms , ...) LP_MAKE_(id, LoopTimer, ms, __VA_ARGS__)
34-
35- // THREAD
36- #define _LP_THREAD_CASE Looper.thisThread()->_case
37- #define _LP_THREAD_RESET () _LP_THREAD_CASE = 0;
38-
39- // начать поток
40- #define LP_THREAD_BEGIN () \
41- switch (_LP_THREAD_CASE) { \
42- case 0:;
43-
44- // завершить поток
45- #define LP_THREAD_END () \
46- } \
47- _LP_THREAD_RESET();
48-
49- #define _LP_THREAD_INNER (body ) \
50- LP_THREAD_BEGIN(); \
51- body \
52- LP_THREAD_END();
53-
54- #define LP_THREAD (body ) static LoopThread _LP_CONCAT(__loop_obj_, __COUNTER__)([]() { _LP_THREAD_INNER(body) })
55- #define LP_THREAD_ (id , body ) static LoopThread _LP_CONCAT(__loop_obj_, __COUNTER__)(LPH(id), []() { _LP_THREAD_INNER(body) })
56- #define LP_THREAD_DATA (T , data , data_arg , body ) static LoopThreadData<T> _LP_CONCAT(__loop_obj_, __COUNTER__)(data, [](data_arg) { _LP_THREAD_INNER(body) })
57- #define LP_THREAD_DATA_ (id , T , data , data_arg , body ) static LoopThreadData<T> _LP_CONCAT(__loop_obj_, __COUNTER__)(LPH(id), data, [](data_arg) { _LP_THREAD_INNER(body) })
58-
59- // перезапустить поток (начать выполнение с начала)
60- #define LP_RESTART () \
61- do { \
62- _LP_THREAD_RESET(); \
63- return; \
64- } while (0);
65-
66- // выйти из потока и потом вернуться в эту точку
67- #define LP_EXIT () \
68- do { \
69- _LP_THREAD_CASE = __COUNTER__ + 1; \
70- return; \
71- case __COUNTER__:; \
72- } while (0);
73-
74- // асинхронно ждать условия
75- #define LP_WAIT (cond ) \
76- do { \
77- _LP_THREAD_CASE = __COUNTER__ + 1; \
78- case __COUNTER__: \
79- if (!(cond)) return; \
80- } while (0);
81-
82- // асинхронно ждать события
83- #define LP_WAIT_EVENT () LP_WAIT(Looper.thisEvent());
84-
85- // асинхронно ждать время в мс
86- #define LP_DELAY (ms ) \
87- do { \
88- Looper.thisThread()->_resetTmr(); \
89- LP_WAIT(Looper.thisThread()->_elapsed(ms)); \
90- Looper.thisThread()->_stopTmr(); \
91- } while (0);
92-
93- // устарело
94- #define LP_SLEEP (ms ) LP_DELAY(ms)
95-
96- // освободить семафор
97- #define LP_SEM_SIGNAL (sem ) sem++;
98-
99- // ждать семафор
100- #define LP_SEM_WAIT (sem ) \
101- do { \
102- LP_WAIT(sem); \
103- sem--; \
104- } while (0);
105-
106- // семафор
107- typedef uint16_t LP_SEM ;
8+ #include "nodes/macro.h"
0 commit comments