Note! This project has moved to github.com/armmbed/mbed-events
This repository has been superceded
This project has moved to mbed-events
Composable event loops combine the cheap synchronicity of event loops with the composability of preempted threads.
Two modular event queue classes are provided:
- EventLoop - for loops coupled with a c++ managed thread
- EventQueue - for manually managed event queues
The Event class takes advantage of the extensibility of FuncPtr to allow an event to be passed through APIs as a normal function.
More information on composable event loops.
EventQueue.h@17:6d564266850e, 2016-04-18 (annotated)
- Committer:
- Christopher Haster
- Date:
- Mon Apr 18 12:51:04 2016 -0500
- Revision:
- 17:6d564266850e
- Parent:
- 16:ff5d48fcce1b
- Child:
- 18:765776145464
Add convenience trigger functions
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Christopher Haster |
0:b1b901ae3696 | 1 | /* EventQueue |
Christopher Haster |
0:b1b901ae3696 | 2 | * |
Christopher Haster |
0:b1b901ae3696 | 3 | * Flexible queue for managing events |
Christopher Haster |
0:b1b901ae3696 | 4 | */ |
Christopher Haster |
0:b1b901ae3696 | 5 | #ifndef EVENT_QUEUE_H |
Christopher Haster |
0:b1b901ae3696 | 6 | #define EVENT_QUEUE_H |
Christopher Haster |
0:b1b901ae3696 | 7 | |
Christopher Haster |
10:62767e708bb6 | 8 | #include "Timer.h" |
Christopher Haster |
10:62767e708bb6 | 9 | #include "Ticker.h" |
Christopher Haster |
14:5abf2ccf2dbf | 10 | #include "FuncPtr.h" |
Christopher Haster |
14:5abf2ccf2dbf | 11 | #include "Binder.h" |
Christopher Haster |
2:11cda6bead99 | 12 | |
Christopher Haster |
0:b1b901ae3696 | 13 | |
Christopher Haster |
0:b1b901ae3696 | 14 | /** Flexible queue for managing events |
Christopher Haster |
0:b1b901ae3696 | 15 | */ |
Christopher Haster |
0:b1b901ae3696 | 16 | class EventQueue { |
Christopher Haster |
0:b1b901ae3696 | 17 | public: |
Christopher Haster |
2:11cda6bead99 | 18 | /** Create an event queue |
Christopher Haster |
14:5abf2ccf2dbf | 19 | * @param event_count Number of events to allow enqueueing at once |
Christopher Haster |
14:5abf2ccf2dbf | 20 | * @param event_context Max size of arguments passed with an event |
Christopher Haster |
2:11cda6bead99 | 21 | */ |
Christopher Haster |
14:5abf2ccf2dbf | 22 | EventQueue(unsigned event_count=32, |
Christopher Haster |
14:5abf2ccf2dbf | 23 | unsigned event_context=0); |
Christopher Haster |
16:ff5d48fcce1b | 24 | |
Christopher Haster |
16:ff5d48fcce1b | 25 | /** Clean up event queue |
Christopher Haster |
16:ff5d48fcce1b | 26 | */ |
Christopher Haster |
16:ff5d48fcce1b | 27 | ~EventQueue(); |
Christopher Haster |
2:11cda6bead99 | 28 | |
Christopher Haster |
0:b1b901ae3696 | 29 | /** Dispatch pending events |
Christopher Haster |
1:2202c19570e5 | 30 | * @param ms Time to wait for events in milliseconds, |
Christopher Haster |
0:b1b901ae3696 | 31 | * 0 indicates to return immediately if no events are pending |
Christopher Haster |
0:b1b901ae3696 | 32 | */ |
Christopher Haster |
1:2202c19570e5 | 33 | void dispatch(int ms=-1); |
Christopher Haster |
0:b1b901ae3696 | 34 | |
Christopher Haster |
2:11cda6bead99 | 35 | /** Get current tick of the event queue |
Christopher Haster |
2:11cda6bead99 | 36 | * @return Number of milliseconds since the queue was instantiated, |
Christopher Haster |
2:11cda6bead99 | 37 | * this count intentionally overflows to 0 after 2^32-1 |
Christopher Haster |
2:11cda6bead99 | 38 | */ |
Christopher Haster |
2:11cda6bead99 | 39 | unsigned get_tick(); |
Christopher Haster |
2:11cda6bead99 | 40 | |
Christopher Haster |
16:ff5d48fcce1b | 41 | /** Determine if tick has been passed |
Christopher Haster |
16:ff5d48fcce1b | 42 | * @param Tick to check |
Christopher Haster |
16:ff5d48fcce1b | 43 | * @param True if tick has been passed |
Christopher Haster |
16:ff5d48fcce1b | 44 | */ |
Christopher Haster |
16:ff5d48fcce1b | 45 | bool past_tick(unsigned tick); |
Christopher Haster |
16:ff5d48fcce1b | 46 | |
Christopher Haster |
0:b1b901ae3696 | 47 | private: |
Christopher Haster |
0:b1b901ae3696 | 48 | struct event { |
Christopher Haster |
1:2202c19570e5 | 49 | struct event *volatile next; |
Christopher Haster |
2:11cda6bead99 | 50 | unsigned target; |
Christopher Haster |
2:11cda6bead99 | 51 | int period; |
Christopher Haster |
2:11cda6bead99 | 52 | |
Christopher Haster |
14:5abf2ccf2dbf | 53 | void (*dispatch)(void *p); |
Christopher Haster |
14:5abf2ccf2dbf | 54 | // data follows |
Christopher Haster |
0:b1b901ae3696 | 55 | }; |
Christopher Haster |
0:b1b901ae3696 | 56 | |
Christopher Haster |
17:6d564266850e | 57 | struct event *event_alloc(unsigned size, int ms=-1); |
Christopher Haster |
17:6d564266850e | 58 | void event_dealloc(struct event *); |
Christopher Haster |
14:5abf2ccf2dbf | 59 | |
Christopher Haster |
17:6d564266850e | 60 | void event_trigger(struct event *e, int delay); |
Christopher Haster |
14:5abf2ccf2dbf | 61 | |
Christopher Haster |
14:5abf2ccf2dbf | 62 | template <typename F> |
Christopher Haster |
17:6d564266850e | 63 | bool event_trigger(F func, int delay, int period, int tolerance, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 64 | struct event *e = event_alloc(sizeof(F), ms); |
Christopher Haster |
14:5abf2ccf2dbf | 65 | if (!e) { |
Christopher Haster |
14:5abf2ccf2dbf | 66 | return false; |
Christopher Haster |
14:5abf2ccf2dbf | 67 | } |
Christopher Haster |
14:5abf2ccf2dbf | 68 | |
Christopher Haster |
14:5abf2ccf2dbf | 69 | e->period = period; |
Christopher Haster |
14:5abf2ccf2dbf | 70 | (void)tolerance; // unused |
Christopher Haster |
14:5abf2ccf2dbf | 71 | e->dispatch = &F::thunk; |
Christopher Haster |
14:5abf2ccf2dbf | 72 | *reinterpret_cast<F*>(e+1) = func; |
Christopher Haster |
14:5abf2ccf2dbf | 73 | |
Christopher Haster |
17:6d564266850e | 74 | event_trigger(e, delay); |
Christopher Haster |
14:5abf2ccf2dbf | 75 | return true; |
Christopher Haster |
14:5abf2ccf2dbf | 76 | } |
Christopher Haster |
0:b1b901ae3696 | 77 | |
Christopher Haster |
2:11cda6bead99 | 78 | void tick(); |
Christopher Haster |
2:11cda6bead99 | 79 | |
Christopher Haster |
14:5abf2ccf2dbf | 80 | unsigned _event_context; |
Christopher Haster |
16:ff5d48fcce1b | 81 | void *_mem; |
Christopher Haster |
16:ff5d48fcce1b | 82 | struct event *volatile _free; |
Christopher Haster |
2:11cda6bead99 | 83 | struct event *volatile _queue; |
Christopher Haster |
14:5abf2ccf2dbf | 84 | |
Christopher Haster |
2:11cda6bead99 | 85 | unsigned _tick; |
Christopher Haster |
2:11cda6bead99 | 86 | mbed::Ticker _ticker; |
Christopher Haster |
2:11cda6bead99 | 87 | mbed::Timer _timer; |
Christopher Haster |
2:11cda6bead99 | 88 | |
Christopher Haster |
0:b1b901ae3696 | 89 | template <typename F> |
Christopher Haster |
0:b1b901ae3696 | 90 | friend class Event; |
Christopher Haster |
17:6d564266850e | 91 | |
Christopher Haster |
17:6d564266850e | 92 | public: |
Christopher Haster |
17:6d564266850e | 93 | // An event loop provides three additional convenience functions |
Christopher Haster |
17:6d564266850e | 94 | // trigger - Immediately post an event to the queue |
Christopher Haster |
17:6d564266850e | 95 | // trigger_in - Post an event after a specified time in milliseconds |
Christopher Haster |
17:6d564266850e | 96 | // trigger_every - Post an event periodically in milliseconds |
Christopher Haster |
17:6d564266850e | 97 | // |
Christopher Haster |
17:6d564266850e | 98 | // Unfortunately, the lack of converting constructors in |
Christopher Haster |
17:6d564266850e | 99 | // template functions combined with a lack of variadic |
Christopher Haster |
17:6d564266850e | 100 | // templates requires 18 declarations for each function |
Christopher Haster |
17:6d564266850e | 101 | |
Christopher Haster |
17:6d564266850e | 102 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 103 | template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 104 | bool trigger(F func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { |
Christopher Haster |
17:6d564266850e | 105 | return event_trigger(Binder<void(A0,A1,A2,A3,A4),A0,A1,A2,A3,A4>(func,a0,a1,a2,a3,a4), 0, -1, 0); |
Christopher Haster |
17:6d564266850e | 106 | } |
Christopher Haster |
17:6d564266850e | 107 | |
Christopher Haster |
17:6d564266850e | 108 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 109 | template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 110 | bool trigger(T *obj, void (*func)(T*,A0,A1,A2,A3,A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { |
Christopher Haster |
17:6d564266850e | 111 | return trigger(FuncPtr<void(A0,A1,A2,A3,A4)>(obj,func),a0,a1,a2,a3,a4); |
Christopher Haster |
17:6d564266850e | 112 | } |
Christopher Haster |
17:6d564266850e | 113 | |
Christopher Haster |
17:6d564266850e | 114 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 115 | template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 116 | bool trigger(T *obj, void (T::*func)(A0,A1,A2,A3,A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { |
Christopher Haster |
17:6d564266850e | 117 | return trigger(FuncPtr<void(A0,A1,A2,A3,A4)>(obj,func),a0,a1,a2,a3,a4); |
Christopher Haster |
17:6d564266850e | 118 | } |
Christopher Haster |
17:6d564266850e | 119 | |
Christopher Haster |
17:6d564266850e | 120 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 121 | template <typename F, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 122 | bool trigger(F func, A0 a0, A1 a1, A2 a2, A3 a3) { |
Christopher Haster |
17:6d564266850e | 123 | return event_trigger(Binder<void(A0,A1,A2,A3),A0,A1,A2,A3>(func,a0,a1,a2,a3), 0, -1, 0); |
Christopher Haster |
17:6d564266850e | 124 | } |
Christopher Haster |
17:6d564266850e | 125 | |
Christopher Haster |
17:6d564266850e | 126 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 127 | template <typename T, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 128 | bool trigger(T *obj, void (*func)(T*,A0,A1,A2,A3), A0 a0, A1 a1, A2 a2, A3 a3) { |
Christopher Haster |
17:6d564266850e | 129 | return trigger(FuncPtr<void(A0,A1,A2,A3)>(obj,func),a0,a1,a2,a3); |
Christopher Haster |
17:6d564266850e | 130 | } |
Christopher Haster |
17:6d564266850e | 131 | |
Christopher Haster |
17:6d564266850e | 132 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 133 | template <typename T, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 134 | bool trigger(T *obj, void (T::*func)(A0,A1,A2,A3), A0 a0, A1 a1, A2 a2, A3 a3) { |
Christopher Haster |
17:6d564266850e | 135 | return trigger(FuncPtr<void(A0,A1,A2,A3)>(obj,func),a0,a1,a2,a3); |
Christopher Haster |
17:6d564266850e | 136 | } |
Christopher Haster |
17:6d564266850e | 137 | |
Christopher Haster |
17:6d564266850e | 138 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 139 | template <typename F, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 140 | bool trigger(F func, A0 a0, A1 a1, A2 a2) { |
Christopher Haster |
17:6d564266850e | 141 | return event_trigger(Binder<void(A0,A1,A2),A0,A1,A2>(func,a0,a1,a2), 0, -1, 0); |
Christopher Haster |
17:6d564266850e | 142 | } |
Christopher Haster |
17:6d564266850e | 143 | |
Christopher Haster |
17:6d564266850e | 144 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 145 | template <typename T, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 146 | bool trigger(T *obj, void (*func)(T*,A0,A1,A2), A0 a0, A1 a1, A2 a2) { |
Christopher Haster |
17:6d564266850e | 147 | return trigger(FuncPtr<void(A0,A1,A2)>(obj,func),a0,a1,a2); |
Christopher Haster |
17:6d564266850e | 148 | } |
Christopher Haster |
17:6d564266850e | 149 | |
Christopher Haster |
17:6d564266850e | 150 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 151 | template <typename T, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 152 | bool trigger(T *obj, void (T::*func)(A0,A1,A2), A0 a0, A1 a1, A2 a2) { |
Christopher Haster |
17:6d564266850e | 153 | return trigger(FuncPtr<void(A0,A1,A2)>(obj,func),a0,a1,a2); |
Christopher Haster |
17:6d564266850e | 154 | } |
Christopher Haster |
17:6d564266850e | 155 | |
Christopher Haster |
17:6d564266850e | 156 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 157 | template <typename F, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 158 | bool trigger(F func, A0 a0, A1 a1) { |
Christopher Haster |
17:6d564266850e | 159 | return event_trigger(Binder<void(A0,A1),A0,A1>(func,a0,a1), 0, -1, 0); |
Christopher Haster |
17:6d564266850e | 160 | } |
Christopher Haster |
17:6d564266850e | 161 | |
Christopher Haster |
17:6d564266850e | 162 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 163 | template <typename T, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 164 | bool trigger(T *obj, void (*func)(T*,A0,A1), A0 a0, A1 a1) { |
Christopher Haster |
17:6d564266850e | 165 | return trigger(FuncPtr<void(A0,A1)>(obj,func),a0,a1); |
Christopher Haster |
17:6d564266850e | 166 | } |
Christopher Haster |
17:6d564266850e | 167 | |
Christopher Haster |
17:6d564266850e | 168 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 169 | template <typename T, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 170 | bool trigger(T *obj, void (T::*func)(A0,A1), A0 a0, A1 a1) { |
Christopher Haster |
17:6d564266850e | 171 | return trigger(FuncPtr<void(A0,A1)>(obj,func),a0,a1); |
Christopher Haster |
17:6d564266850e | 172 | } |
Christopher Haster |
17:6d564266850e | 173 | |
Christopher Haster |
17:6d564266850e | 174 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 175 | template <typename F, typename A0> |
Christopher Haster |
17:6d564266850e | 176 | bool trigger(F func, A0 a0) { |
Christopher Haster |
17:6d564266850e | 177 | return event_trigger(Binder<void(A0),A0>(func,a0), 0, -1, 0); |
Christopher Haster |
17:6d564266850e | 178 | } |
Christopher Haster |
17:6d564266850e | 179 | |
Christopher Haster |
17:6d564266850e | 180 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 181 | template <typename T, typename A0> |
Christopher Haster |
17:6d564266850e | 182 | bool trigger(T *obj, void (*func)(T*,A0), A0 a0) { |
Christopher Haster |
17:6d564266850e | 183 | return trigger(FuncPtr<void(A0)>(obj,func),a0); |
Christopher Haster |
17:6d564266850e | 184 | } |
Christopher Haster |
17:6d564266850e | 185 | |
Christopher Haster |
17:6d564266850e | 186 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 187 | template <typename T, typename A0> |
Christopher Haster |
17:6d564266850e | 188 | bool trigger(T *obj, void (T::*func)(A0), A0 a0) { |
Christopher Haster |
17:6d564266850e | 189 | return trigger(FuncPtr<void(A0)>(obj,func),a0); |
Christopher Haster |
17:6d564266850e | 190 | } |
Christopher Haster |
17:6d564266850e | 191 | |
Christopher Haster |
17:6d564266850e | 192 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 193 | template <typename F> |
Christopher Haster |
17:6d564266850e | 194 | bool trigger(F func) { |
Christopher Haster |
17:6d564266850e | 195 | return event_trigger(Binder<void()>(func), 0, -1, 0); |
Christopher Haster |
17:6d564266850e | 196 | } |
Christopher Haster |
17:6d564266850e | 197 | |
Christopher Haster |
17:6d564266850e | 198 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 199 | template <typename T> |
Christopher Haster |
17:6d564266850e | 200 | bool trigger(T *obj, void (*func)(T*)) { |
Christopher Haster |
17:6d564266850e | 201 | return trigger(FuncPtr<void()>(obj,func)); |
Christopher Haster |
17:6d564266850e | 202 | } |
Christopher Haster |
17:6d564266850e | 203 | |
Christopher Haster |
17:6d564266850e | 204 | /** Immediately post an event to the queue */ |
Christopher Haster |
17:6d564266850e | 205 | template <typename T> |
Christopher Haster |
17:6d564266850e | 206 | bool trigger(T *obj, void (T::*func)()) { |
Christopher Haster |
17:6d564266850e | 207 | return trigger(FuncPtr<void()>(obj,func)); |
Christopher Haster |
17:6d564266850e | 208 | } |
Christopher Haster |
17:6d564266850e | 209 | |
Christopher Haster |
17:6d564266850e | 210 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 211 | template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 212 | bool trigger_in(F func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 213 | return event_trigger(Binder<void(A0,A1,A2,A3,A4),A0,A1,A2,A3,A4>(func,a0,a1,a2,a3,a4), ms, -1, 0); |
Christopher Haster |
17:6d564266850e | 214 | } |
Christopher Haster |
17:6d564266850e | 215 | |
Christopher Haster |
17:6d564266850e | 216 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 217 | template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 218 | bool trigger_in(T *obj, void (*func)(T*,A0,A1,A2,A3,A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 219 | return trigger_in(FuncPtr<void(A0,A1,A2,A3,A4)>(obj,func),a0,a1,a2,a3,a4,ms); |
Christopher Haster |
17:6d564266850e | 220 | } |
Christopher Haster |
17:6d564266850e | 221 | |
Christopher Haster |
17:6d564266850e | 222 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 223 | template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 224 | bool trigger_in(T *obj, void (T::*func)(A0,A1,A2,A3,A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 225 | return trigger_in(FuncPtr<void(A0,A1,A2,A3,A4)>(obj,func),a0,a1,a2,a3,a4,ms); |
Christopher Haster |
17:6d564266850e | 226 | } |
Christopher Haster |
17:6d564266850e | 227 | |
Christopher Haster |
17:6d564266850e | 228 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 229 | template <typename F, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 230 | bool trigger_in(F func, A0 a0, A1 a1, A2 a2, A3 a3, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 231 | return event_trigger(Binder<void(A0,A1,A2,A3),A0,A1,A2,A3>(func,a0,a1,a2,a3), ms, -1, 0); |
Christopher Haster |
17:6d564266850e | 232 | } |
Christopher Haster |
17:6d564266850e | 233 | |
Christopher Haster |
17:6d564266850e | 234 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 235 | template <typename T, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 236 | bool trigger_in(T *obj, void (*func)(T*,A0,A1,A2,A3), A0 a0, A1 a1, A2 a2, A3 a3, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 237 | return trigger_in(FuncPtr<void(A0,A1,A2,A3)>(obj,func),a0,a1,a2,a3,ms); |
Christopher Haster |
17:6d564266850e | 238 | } |
Christopher Haster |
17:6d564266850e | 239 | |
Christopher Haster |
17:6d564266850e | 240 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 241 | template <typename T, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 242 | bool trigger_in(T *obj, void (T::*func)(A0,A1,A2,A3), A0 a0, A1 a1, A2 a2, A3 a3, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 243 | return trigger_in(FuncPtr<void(A0,A1,A2,A3)>(obj,func),a0,a1,a2,a3,ms); |
Christopher Haster |
17:6d564266850e | 244 | } |
Christopher Haster |
17:6d564266850e | 245 | |
Christopher Haster |
17:6d564266850e | 246 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 247 | template <typename F, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 248 | bool trigger_in(F func, A0 a0, A1 a1, A2 a2, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 249 | return event_trigger(Binder<void(A0,A1,A2),A0,A1,A2>(func,a0,a1,a2), ms, -1, 0); |
Christopher Haster |
17:6d564266850e | 250 | } |
Christopher Haster |
17:6d564266850e | 251 | |
Christopher Haster |
17:6d564266850e | 252 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 253 | template <typename T, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 254 | bool trigger_in(T *obj, void (*func)(T*,A0,A1,A2), A0 a0, A1 a1, A2 a2, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 255 | return trigger_in(FuncPtr<void(A0,A1,A2)>(obj,func),a0,a1,a2,ms); |
Christopher Haster |
17:6d564266850e | 256 | } |
Christopher Haster |
17:6d564266850e | 257 | |
Christopher Haster |
17:6d564266850e | 258 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 259 | template <typename T, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 260 | bool trigger_in(T *obj, void (T::*func)(A0,A1,A2), A0 a0, A1 a1, A2 a2, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 261 | return trigger_in(FuncPtr<void(A0,A1,A2)>(obj,func),a0,a1,a2,ms); |
Christopher Haster |
17:6d564266850e | 262 | } |
Christopher Haster |
17:6d564266850e | 263 | |
Christopher Haster |
17:6d564266850e | 264 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 265 | template <typename F, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 266 | bool trigger_in(F func, A0 a0, A1 a1, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 267 | return event_trigger(Binder<void(A0,A1),A0,A1>(func,a0,a1), ms, -1, 0); |
Christopher Haster |
17:6d564266850e | 268 | } |
Christopher Haster |
17:6d564266850e | 269 | |
Christopher Haster |
17:6d564266850e | 270 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 271 | template <typename T, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 272 | bool trigger_in(T *obj, void (*func)(T*,A0,A1), A0 a0, A1 a1, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 273 | return trigger_in(FuncPtr<void(A0,A1)>(obj,func),a0,a1,ms); |
Christopher Haster |
17:6d564266850e | 274 | } |
Christopher Haster |
17:6d564266850e | 275 | |
Christopher Haster |
17:6d564266850e | 276 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 277 | template <typename T, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 278 | bool trigger_in(T *obj, void (T::*func)(A0,A1), A0 a0, A1 a1, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 279 | return trigger_in(FuncPtr<void(A0,A1)>(obj,func),a0,a1,ms); |
Christopher Haster |
17:6d564266850e | 280 | } |
Christopher Haster |
17:6d564266850e | 281 | |
Christopher Haster |
17:6d564266850e | 282 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 283 | template <typename F, typename A0> |
Christopher Haster |
17:6d564266850e | 284 | bool trigger_in(F func, A0 a0, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 285 | return event_trigger(Binder<void(A0),A0>(func,a0), ms, -1, 0); |
Christopher Haster |
17:6d564266850e | 286 | } |
Christopher Haster |
17:6d564266850e | 287 | |
Christopher Haster |
17:6d564266850e | 288 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 289 | template <typename T, typename A0> |
Christopher Haster |
17:6d564266850e | 290 | bool trigger_in(T *obj, void (*func)(T*,A0), A0 a0, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 291 | return trigger_in(FuncPtr<void(A0)>(obj,func),a0,ms); |
Christopher Haster |
17:6d564266850e | 292 | } |
Christopher Haster |
17:6d564266850e | 293 | |
Christopher Haster |
17:6d564266850e | 294 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 295 | template <typename T, typename A0> |
Christopher Haster |
17:6d564266850e | 296 | bool trigger_in(T *obj, void (T::*func)(A0), A0 a0, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 297 | return trigger_in(FuncPtr<void(A0)>(obj,func),a0,ms); |
Christopher Haster |
17:6d564266850e | 298 | } |
Christopher Haster |
17:6d564266850e | 299 | |
Christopher Haster |
17:6d564266850e | 300 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 301 | template <typename F> |
Christopher Haster |
17:6d564266850e | 302 | bool trigger_in(F func, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 303 | return event_trigger(Binder<void()>(func), ms, -1, 0); |
Christopher Haster |
17:6d564266850e | 304 | } |
Christopher Haster |
17:6d564266850e | 305 | |
Christopher Haster |
17:6d564266850e | 306 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 307 | template <typename T> |
Christopher Haster |
17:6d564266850e | 308 | bool trigger_in(T *obj, void (*func)(T*), int ms=-1) { |
Christopher Haster |
17:6d564266850e | 309 | return trigger_in(FuncPtr<void()>(obj,func),ms); |
Christopher Haster |
17:6d564266850e | 310 | } |
Christopher Haster |
17:6d564266850e | 311 | |
Christopher Haster |
17:6d564266850e | 312 | /** Post an event after a specified time in milliseconds */ |
Christopher Haster |
17:6d564266850e | 313 | template <typename T> |
Christopher Haster |
17:6d564266850e | 314 | bool trigger_in(T *obj, void (T::*func)(), int ms=-1) { |
Christopher Haster |
17:6d564266850e | 315 | return trigger_in(FuncPtr<void()>(obj,func),ms); |
Christopher Haster |
17:6d564266850e | 316 | } |
Christopher Haster |
17:6d564266850e | 317 | |
Christopher Haster |
17:6d564266850e | 318 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 319 | template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 320 | bool trigger_every(F func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 321 | return event_trigger(Binder<void(A0,A1,A2,A3,A4),A0,A1,A2,A3,A4>(func,a0,a1,a2,a3,a4), 0, ms, 0); |
Christopher Haster |
17:6d564266850e | 322 | } |
Christopher Haster |
17:6d564266850e | 323 | |
Christopher Haster |
17:6d564266850e | 324 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 325 | template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 326 | bool trigger_every(T *obj, void (*func)(T*,A0,A1,A2,A3,A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 327 | return trigger_every(FuncPtr<void(A0,A1,A2,A3,A4)>(obj,func),a0,a1,a2,a3,a4,ms); |
Christopher Haster |
17:6d564266850e | 328 | } |
Christopher Haster |
17:6d564266850e | 329 | |
Christopher Haster |
17:6d564266850e | 330 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 331 | template <typename T, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
17:6d564266850e | 332 | bool trigger_every(T *obj, void (T::*func)(A0,A1,A2,A3,A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 333 | return trigger_every(FuncPtr<void(A0,A1,A2,A3,A4)>(obj,func),a0,a1,a2,a3,a4,ms); |
Christopher Haster |
17:6d564266850e | 334 | } |
Christopher Haster |
17:6d564266850e | 335 | |
Christopher Haster |
17:6d564266850e | 336 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 337 | template <typename F, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 338 | bool trigger_every(F func, A0 a0, A1 a1, A2 a2, A3 a3, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 339 | return event_trigger(Binder<void(A0,A1,A2,A3),A0,A1,A2,A3>(func,a0,a1,a2,a3), 0, ms, 0); |
Christopher Haster |
17:6d564266850e | 340 | } |
Christopher Haster |
17:6d564266850e | 341 | |
Christopher Haster |
17:6d564266850e | 342 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 343 | template <typename T, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 344 | bool trigger_every(T *obj, void (*func)(T*,A0,A1,A2,A3), A0 a0, A1 a1, A2 a2, A3 a3, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 345 | return trigger_every(FuncPtr<void(A0,A1,A2,A3)>(obj,func),a0,a1,a2,a3,ms); |
Christopher Haster |
17:6d564266850e | 346 | } |
Christopher Haster |
17:6d564266850e | 347 | |
Christopher Haster |
17:6d564266850e | 348 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 349 | template <typename T, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
17:6d564266850e | 350 | bool trigger_every(T *obj, void (T::*func)(A0,A1,A2,A3), A0 a0, A1 a1, A2 a2, A3 a3, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 351 | return trigger_every(FuncPtr<void(A0,A1,A2,A3)>(obj,func),a0,a1,a2,a3,ms); |
Christopher Haster |
17:6d564266850e | 352 | } |
Christopher Haster |
17:6d564266850e | 353 | |
Christopher Haster |
17:6d564266850e | 354 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 355 | template <typename F, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 356 | bool trigger_every(F func, A0 a0, A1 a1, A2 a2, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 357 | return event_trigger(Binder<void(A0,A1,A2),A0,A1,A2>(func,a0,a1,a2), 0, ms, 0); |
Christopher Haster |
17:6d564266850e | 358 | } |
Christopher Haster |
17:6d564266850e | 359 | |
Christopher Haster |
17:6d564266850e | 360 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 361 | template <typename T, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 362 | bool trigger_every(T *obj, void (*func)(T*,A0,A1,A2), A0 a0, A1 a1, A2 a2, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 363 | return trigger_every(FuncPtr<void(A0,A1,A2)>(obj,func),a0,a1,a2,ms); |
Christopher Haster |
17:6d564266850e | 364 | } |
Christopher Haster |
17:6d564266850e | 365 | |
Christopher Haster |
17:6d564266850e | 366 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 367 | template <typename T, typename A0, typename A1, typename A2> |
Christopher Haster |
17:6d564266850e | 368 | bool trigger_every(T *obj, void (T::*func)(A0,A1,A2), A0 a0, A1 a1, A2 a2, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 369 | return trigger_every(FuncPtr<void(A0,A1,A2)>(obj,func),a0,a1,a2,ms); |
Christopher Haster |
17:6d564266850e | 370 | } |
Christopher Haster |
17:6d564266850e | 371 | |
Christopher Haster |
17:6d564266850e | 372 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 373 | template <typename F, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 374 | bool trigger_every(F func, A0 a0, A1 a1, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 375 | return event_trigger(Binder<void(A0,A1),A0,A1>(func,a0,a1), 0, ms, 0); |
Christopher Haster |
17:6d564266850e | 376 | } |
Christopher Haster |
17:6d564266850e | 377 | |
Christopher Haster |
17:6d564266850e | 378 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 379 | template <typename T, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 380 | bool trigger_every(T *obj, void (*func)(T*,A0,A1), A0 a0, A1 a1, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 381 | return trigger_every(FuncPtr<void(A0,A1)>(obj,func),a0,a1,ms); |
Christopher Haster |
17:6d564266850e | 382 | } |
Christopher Haster |
17:6d564266850e | 383 | |
Christopher Haster |
17:6d564266850e | 384 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 385 | template <typename T, typename A0, typename A1> |
Christopher Haster |
17:6d564266850e | 386 | bool trigger_every(T *obj, void (T::*func)(A0,A1), A0 a0, A1 a1, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 387 | return trigger_every(FuncPtr<void(A0,A1)>(obj,func),a0,a1,ms); |
Christopher Haster |
17:6d564266850e | 388 | } |
Christopher Haster |
17:6d564266850e | 389 | |
Christopher Haster |
17:6d564266850e | 390 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 391 | template <typename F, typename A0> |
Christopher Haster |
17:6d564266850e | 392 | bool trigger_every(F func, A0 a0, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 393 | return event_trigger(Binder<void(A0),A0>(func,a0), 0, ms, 0); |
Christopher Haster |
17:6d564266850e | 394 | } |
Christopher Haster |
17:6d564266850e | 395 | |
Christopher Haster |
17:6d564266850e | 396 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 397 | template <typename T, typename A0> |
Christopher Haster |
17:6d564266850e | 398 | bool trigger_every(T *obj, void (*func)(T*,A0), A0 a0, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 399 | return trigger_every(FuncPtr<void(A0)>(obj,func),a0,ms); |
Christopher Haster |
17:6d564266850e | 400 | } |
Christopher Haster |
17:6d564266850e | 401 | |
Christopher Haster |
17:6d564266850e | 402 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 403 | template <typename T, typename A0> |
Christopher Haster |
17:6d564266850e | 404 | bool trigger_every(T *obj, void (T::*func)(A0), A0 a0, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 405 | return trigger_every(FuncPtr<void(A0)>(obj,func),a0,ms); |
Christopher Haster |
17:6d564266850e | 406 | } |
Christopher Haster |
17:6d564266850e | 407 | |
Christopher Haster |
17:6d564266850e | 408 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 409 | template <typename F> |
Christopher Haster |
17:6d564266850e | 410 | bool trigger_every(F func, int ms=-1) { |
Christopher Haster |
17:6d564266850e | 411 | return event_trigger(Binder<void()>(func), 0, ms, 0); |
Christopher Haster |
17:6d564266850e | 412 | } |
Christopher Haster |
17:6d564266850e | 413 | |
Christopher Haster |
17:6d564266850e | 414 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 415 | template <typename T> |
Christopher Haster |
17:6d564266850e | 416 | bool trigger_every(T *obj, void (*func)(T*), int ms=-1) { |
Christopher Haster |
17:6d564266850e | 417 | return trigger_every(FuncPtr<void()>(obj,func),ms); |
Christopher Haster |
17:6d564266850e | 418 | } |
Christopher Haster |
17:6d564266850e | 419 | |
Christopher Haster |
17:6d564266850e | 420 | /** Post an event periodically in milliseconds */ |
Christopher Haster |
17:6d564266850e | 421 | template <typename T> |
Christopher Haster |
17:6d564266850e | 422 | bool trigger_every(T *obj, void (T::*func)(), int ms=-1) { |
Christopher Haster |
17:6d564266850e | 423 | return trigger_every(FuncPtr<void()>(obj,func),ms); |
Christopher Haster |
17:6d564266850e | 424 | } |
Christopher Haster |
0:b1b901ae3696 | 425 | }; |
Christopher Haster |
0:b1b901ae3696 | 426 | |
Christopher Haster |
0:b1b901ae3696 | 427 | |
Christopher Haster |
0:b1b901ae3696 | 428 | #endif |