This is a fork of the `events` subdirectory of https://github.com/ARMmbed/mbed-os
Dependents: HelloWorld_CCA01M1 HelloWorld_CCA02M1 CI-data-logger-server HelloWorld_CCA02M1 ... more
This is a fork of the events
subdirectory of https://github.com/ARMmbed/mbed-os.
Note, you must import this library with import name: events
!!!
Event.h@9822:fb4e93c12c32, 2017-04-04 (annotated)
- Committer:
- Jimmy Brisson
- Date:
- Tue Apr 04 14:21:53 2017 -0500
- Revision:
- 9822:fb4e93c12c32
- Parent:
- 15:42ba4ffdf78d
- Child:
- 9825:e033ed92ed49
Update class documentation tags
stop using scope for \addtogroup. It was placing class methods into the
group documentation instead of the class documentation. The new style is
to explicitly tag the class as @ingroup. This new method will allow the
class to be linked in the group page, and the class page will contain
the detailed documentation of the class methods.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Bogdan Marinescu |
0:a792d4bf36c2 | 1 | /* events |
Bogdan Marinescu |
0:a792d4bf36c2 | 2 | * Copyright (c) 2016 ARM Limited |
Bogdan Marinescu |
0:a792d4bf36c2 | 3 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Bogdan Marinescu |
0:a792d4bf36c2 | 5 | * you may not use this file except in compliance with the License. |
Bogdan Marinescu |
0:a792d4bf36c2 | 6 | * You may obtain a copy of the License at |
Bogdan Marinescu |
0:a792d4bf36c2 | 7 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
Bogdan Marinescu |
0:a792d4bf36c2 | 9 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 10 | * Unless required by applicable law or agreed to in writing, software |
Bogdan Marinescu |
0:a792d4bf36c2 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
Bogdan Marinescu |
0:a792d4bf36c2 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Bogdan Marinescu |
0:a792d4bf36c2 | 13 | * See the License for the specific language governing permissions and |
Bogdan Marinescu |
0:a792d4bf36c2 | 14 | * limitations under the License. |
Bogdan Marinescu |
0:a792d4bf36c2 | 15 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 16 | #ifndef EVENT_H |
Bogdan Marinescu |
0:a792d4bf36c2 | 17 | #define EVENT_H |
Bogdan Marinescu |
0:a792d4bf36c2 | 18 | |
Sam Grove |
2:a60d8117d0e0 | 19 | #include "events/EventQueue.h" |
Sam Grove |
2:a60d8117d0e0 | 20 | #include "platform/mbed_assert.h" |
Bogdan Marinescu |
0:a792d4bf36c2 | 21 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 22 | namespace events { |
Jimmy Brisson |
5:705843a08e16 | 23 | /** \addtogroup events */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 24 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 25 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 26 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 27 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 28 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 29 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 30 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 31 | class Event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 32 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 33 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 34 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 35 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 36 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 37 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 38 | template <> |
Bogdan Marinescu |
0:a792d4bf36c2 | 39 | class Event<void()> { |
Bogdan Marinescu |
0:a792d4bf36c2 | 40 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 41 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 42 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 43 | * Constructs an event bound to the specified event queue. The specified |
Bogdan Marinescu |
0:a792d4bf36c2 | 44 | * callback acts as the target for the event and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 45 | * context of the event queue's dispatch loop once posted. |
Bogdan Marinescu |
0:a792d4bf36c2 | 46 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 47 | * @param q Event queue to dispatch on |
Bogdan Marinescu |
0:a792d4bf36c2 | 48 | * @param f Function to execute when the event is dispatched |
Christopher Haster |
15:42ba4ffdf78d | 49 | * @param c0..c4 Arguments to bind to the callback, these arguments are |
Christopher Haster |
15:42ba4ffdf78d | 50 | * allocated on an irq-safe allocator from the event queue's |
Christopher Haster |
15:42ba4ffdf78d | 51 | * memory pool. Must be type-compatible with b0..b4, the |
Christopher Haster |
15:42ba4ffdf78d | 52 | * arguments to the underlying callback. |
Bogdan Marinescu |
0:a792d4bf36c2 | 53 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 54 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 55 | Event(EventQueue *q, F f) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 56 | _event = static_cast<struct event *>( |
Bogdan Marinescu |
0:a792d4bf36c2 | 57 | equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F))); |
Christopher Haster |
4:f157c7bf01cc | 58 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 59 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 60 | _event->equeue = &q->_equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 61 | _event->id = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 62 | _event->delay = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 63 | _event->period = -1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 64 | |
Christopher Haster |
4:f157c7bf01cc | 65 | _event->post = &Event::event_post<F>; |
Christopher Haster |
4:f157c7bf01cc | 66 | _event->dtor = &Event::event_dtor<F>; |
Bogdan Marinescu |
0:a792d4bf36c2 | 67 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 68 | new (_event+1) F(f); |
Bogdan Marinescu |
0:a792d4bf36c2 | 69 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 70 | _event->ref = 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 71 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 72 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 73 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 74 | /** Copy constructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 75 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 76 | Event(const Event &e) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 77 | _event = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 78 | if (e._event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 79 | _event = e._event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 80 | _event->ref += 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 81 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 82 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 83 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 84 | /** Assignment operator for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 85 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 86 | Event &operator=(const Event &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 87 | if (this != &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 88 | this->~Event(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 89 | new (this) Event(that); |
Bogdan Marinescu |
0:a792d4bf36c2 | 90 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 91 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 92 | return *this; |
Bogdan Marinescu |
0:a792d4bf36c2 | 93 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 94 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 95 | /** Destructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 96 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 97 | ~Event() { |
Bogdan Marinescu |
0:a792d4bf36c2 | 98 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 99 | _event->ref -= 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 100 | if (_event->ref == 0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 101 | _event->dtor(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 102 | equeue_dealloc(_event->equeue, _event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 103 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 104 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 105 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 106 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 107 | /** Configure the delay of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 108 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 109 | * @param delay Millisecond delay before dispatching the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 110 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 111 | void delay(int delay) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 112 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 113 | _event->delay = delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 114 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 115 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 116 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 117 | /** Configure the period of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 118 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 119 | * @param period Millisecond period for repeatedly dispatching an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 120 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 121 | void period(int period) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 122 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 123 | _event->period = period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 124 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 125 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 126 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 127 | /** Posts an event onto the underlying event queue |
Bogdan Marinescu |
0:a792d4bf36c2 | 128 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 129 | * The event is posted to the underlying queue and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 130 | * context of the event queue's dispatch loop. |
Bogdan Marinescu |
0:a792d4bf36c2 | 131 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 132 | * The post function is irq safe and can act as a mechanism for moving |
Bogdan Marinescu |
0:a792d4bf36c2 | 133 | * events out of irq contexts. |
Bogdan Marinescu |
0:a792d4bf36c2 | 134 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 135 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 136 | * @return A unique id that represents the posted event and can |
Bogdan Marinescu |
0:a792d4bf36c2 | 137 | * be passed to EventQueue::cancel, or an id of 0 if |
Bogdan Marinescu |
0:a792d4bf36c2 | 138 | * there is not enough memory to allocate the event. |
Bogdan Marinescu |
0:a792d4bf36c2 | 139 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 140 | int post() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 141 | if (!_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 142 | return 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 143 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 144 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 145 | _event->id = _event->post(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 146 | return _event->id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 147 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 148 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 149 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 150 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 151 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 152 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 153 | void call() const { |
Christopher Haster |
8:773de146a61c | 154 | MBED_UNUSED int id = post(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 155 | MBED_ASSERT(id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 156 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 157 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 158 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 159 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 160 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 161 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 162 | void operator()() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 163 | return call(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 164 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 165 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 166 | /** Static thunk for passing as C-style function |
Bogdan Marinescu |
0:a792d4bf36c2 | 167 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 168 | * @param func Event to call passed as a void pointer |
Bogdan Marinescu |
0:a792d4bf36c2 | 169 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 170 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 171 | static void thunk(void *func) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 172 | return static_cast<Event*>(func)->call(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 173 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 174 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 175 | /** Cancels the most recently posted event |
Bogdan Marinescu |
0:a792d4bf36c2 | 176 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 177 | * Attempts to cancel the most recently posted event. It is safe to call |
Bogdan Marinescu |
0:a792d4bf36c2 | 178 | * cancel after an event has already been dispatched. |
Bogdan Marinescu |
0:a792d4bf36c2 | 179 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 180 | * The cancel function is irq safe. |
Bogdan Marinescu |
0:a792d4bf36c2 | 181 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 182 | * If called while the event queue's dispatch loop is active, the cancel |
Bogdan Marinescu |
0:a792d4bf36c2 | 183 | * function does not garuntee that the event will not execute after it |
Bogdan Marinescu |
0:a792d4bf36c2 | 184 | * returns, as the event may have already begun executing. |
Bogdan Marinescu |
0:a792d4bf36c2 | 185 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 186 | void cancel() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 187 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 188 | equeue_cancel(_event->equeue, _event->id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 189 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 190 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 191 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 192 | private: |
Bogdan Marinescu |
0:a792d4bf36c2 | 193 | struct event { |
Bogdan Marinescu |
0:a792d4bf36c2 | 194 | unsigned ref; |
Bogdan Marinescu |
0:a792d4bf36c2 | 195 | equeue_t *equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 196 | int id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 197 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 198 | int delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 199 | int period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 200 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 201 | int (*post)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 202 | void (*dtor)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 203 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 204 | // F follows |
Bogdan Marinescu |
0:a792d4bf36c2 | 205 | } *_event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 206 | |
Christopher Haster |
4:f157c7bf01cc | 207 | // Event attributes |
Christopher Haster |
4:f157c7bf01cc | 208 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 209 | static int event_post(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 210 | typedef EventQueue::context00<F> C; |
Christopher Haster |
4:f157c7bf01cc | 211 | void *p = equeue_alloc(e->equeue, sizeof(C)); |
Christopher Haster |
4:f157c7bf01cc | 212 | if (!p) { |
Christopher Haster |
4:f157c7bf01cc | 213 | return 0; |
Christopher Haster |
4:f157c7bf01cc | 214 | } |
Christopher Haster |
4:f157c7bf01cc | 215 | |
Christopher Haster |
4:f157c7bf01cc | 216 | new (p) C(*(F*)(e + 1)); |
Christopher Haster |
4:f157c7bf01cc | 217 | equeue_event_delay(p, e->delay); |
Christopher Haster |
4:f157c7bf01cc | 218 | equeue_event_period(p, e->period); |
Christopher Haster |
7:80510299c57c | 219 | equeue_event_dtor(p, &EventQueue::function_dtor<C>); |
Christopher Haster |
7:80510299c57c | 220 | return equeue_post(e->equeue, &EventQueue::function_call<C>, p); |
Christopher Haster |
4:f157c7bf01cc | 221 | } |
Christopher Haster |
4:f157c7bf01cc | 222 | |
Christopher Haster |
4:f157c7bf01cc | 223 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 224 | static void event_dtor(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 225 | ((F*)(e + 1))->~F(); |
Christopher Haster |
4:f157c7bf01cc | 226 | } |
Christopher Haster |
4:f157c7bf01cc | 227 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 228 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 229 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 230 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 231 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 232 | template <typename F, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 233 | Event(EventQueue *q, F f, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 234 | new (this) Event(q, EventQueue::context10<F, C0>(f, c0)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 235 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 236 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 237 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 238 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 239 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 240 | template <typename F, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 241 | Event(EventQueue *q, F f, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 242 | new (this) Event(q, EventQueue::context20<F, C0, C1>(f, c0, c1)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 243 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 244 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 245 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 246 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 247 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 248 | template <typename F, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 249 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 250 | new (this) Event(q, EventQueue::context30<F, C0, C1, C2>(f, c0, c1, c2)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 251 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 252 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 253 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 254 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 255 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 256 | template <typename F, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 257 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 258 | new (this) Event(q, EventQueue::context40<F, C0, C1, C2, C3>(f, c0, c1, c2, c3)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 259 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 260 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 261 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 262 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 263 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 264 | template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 265 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 266 | new (this) Event(q, EventQueue::context50<F, C0, C1, C2, C3, C4>(f, c0, c1, c2, c3, c4)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 267 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 268 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 269 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 270 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 271 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 272 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 273 | Event(EventQueue *q, T *obj, R (T::*method)(B0), B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 274 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 275 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 276 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 277 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 278 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 279 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 280 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 281 | Event(EventQueue *q, const T *obj, R (T::*method)(B0) const, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 282 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 283 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 284 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 285 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 286 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 287 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 288 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 289 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0) volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 290 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 291 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 292 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 293 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 294 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 295 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 296 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 297 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0) const volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 298 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 299 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 300 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 301 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 302 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 303 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 304 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 305 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1), B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 306 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 307 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 308 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 309 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 310 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 311 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 312 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 313 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1) const, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 314 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 315 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 316 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 317 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 318 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 319 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 320 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 321 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1) volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 322 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 323 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 324 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 325 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 326 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 327 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 328 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 329 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1) const volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 330 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 331 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 332 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 333 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 334 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 335 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 336 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 337 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2), B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 338 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 339 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 340 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 341 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 342 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 343 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 344 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 345 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2) const, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 346 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 347 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 348 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 349 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 350 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 351 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 352 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 353 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2) volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 354 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 355 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 356 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 357 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 358 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 359 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 360 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 361 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2) const volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 362 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 363 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 364 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 365 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 366 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 367 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 368 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 369 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3), B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 370 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 371 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 372 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 373 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 374 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 375 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 376 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 377 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3) const, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 378 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 379 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 380 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 381 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 382 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 383 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 384 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 385 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3) volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 386 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 387 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 388 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 389 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 390 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 391 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 392 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 393 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 394 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 395 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 396 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 397 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 398 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 399 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 400 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 401 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 402 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 403 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 404 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 405 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 406 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 407 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 408 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 409 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 410 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 411 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 412 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 413 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 414 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 415 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 416 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 417 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 418 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 419 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 420 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 421 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 422 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 423 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 424 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 425 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 426 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 427 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 428 | }; |
Bogdan Marinescu |
0:a792d4bf36c2 | 429 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 430 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 431 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 432 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 433 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 434 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 435 | template <typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 436 | class Event<void(A0)> { |
Bogdan Marinescu |
0:a792d4bf36c2 | 437 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 438 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 439 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 440 | * Constructs an event bound to the specified event queue. The specified |
Bogdan Marinescu |
0:a792d4bf36c2 | 441 | * callback acts as the target for the event and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 442 | * context of the event queue's dispatch loop once posted. |
Bogdan Marinescu |
0:a792d4bf36c2 | 443 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 444 | * @param q Event queue to dispatch on |
Bogdan Marinescu |
0:a792d4bf36c2 | 445 | * @param f Function to execute when the event is dispatched |
Christopher Haster |
15:42ba4ffdf78d | 446 | * @param c0..c4 Arguments to bind to the callback, these arguments are |
Christopher Haster |
15:42ba4ffdf78d | 447 | * allocated on an irq-safe allocator from the event queue's |
Christopher Haster |
15:42ba4ffdf78d | 448 | * memory pool. Must be type-compatible with b0..b4, the |
Christopher Haster |
15:42ba4ffdf78d | 449 | * arguments to the underlying callback. |
Bogdan Marinescu |
0:a792d4bf36c2 | 450 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 451 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 452 | Event(EventQueue *q, F f) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 453 | _event = static_cast<struct event *>( |
Bogdan Marinescu |
0:a792d4bf36c2 | 454 | equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F))); |
Christopher Haster |
4:f157c7bf01cc | 455 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 456 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 457 | _event->equeue = &q->_equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 458 | _event->id = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 459 | _event->delay = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 460 | _event->period = -1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 461 | |
Christopher Haster |
4:f157c7bf01cc | 462 | _event->post = &Event::event_post<F>; |
Christopher Haster |
4:f157c7bf01cc | 463 | _event->dtor = &Event::event_dtor<F>; |
Bogdan Marinescu |
0:a792d4bf36c2 | 464 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 465 | new (_event+1) F(f); |
Bogdan Marinescu |
0:a792d4bf36c2 | 466 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 467 | _event->ref = 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 468 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 469 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 470 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 471 | /** Copy constructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 472 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 473 | Event(const Event &e) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 474 | _event = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 475 | if (e._event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 476 | _event = e._event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 477 | _event->ref += 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 478 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 479 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 480 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 481 | /** Assignment operator for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 482 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 483 | Event &operator=(const Event &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 484 | if (this != &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 485 | this->~Event(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 486 | new (this) Event(that); |
Bogdan Marinescu |
0:a792d4bf36c2 | 487 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 488 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 489 | return *this; |
Bogdan Marinescu |
0:a792d4bf36c2 | 490 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 491 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 492 | /** Destructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 493 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 494 | ~Event() { |
Bogdan Marinescu |
0:a792d4bf36c2 | 495 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 496 | _event->ref -= 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 497 | if (_event->ref == 0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 498 | _event->dtor(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 499 | equeue_dealloc(_event->equeue, _event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 500 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 501 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 502 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 503 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 504 | /** Configure the delay of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 505 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 506 | * @param delay Millisecond delay before dispatching the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 507 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 508 | void delay(int delay) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 509 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 510 | _event->delay = delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 511 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 512 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 513 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 514 | /** Configure the period of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 515 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 516 | * @param period Millisecond period for repeatedly dispatching an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 517 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 518 | void period(int period) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 519 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 520 | _event->period = period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 521 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 522 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 523 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 524 | /** Posts an event onto the underlying event queue |
Bogdan Marinescu |
0:a792d4bf36c2 | 525 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 526 | * The event is posted to the underlying queue and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 527 | * context of the event queue's dispatch loop. |
Bogdan Marinescu |
0:a792d4bf36c2 | 528 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 529 | * The post function is irq safe and can act as a mechanism for moving |
Bogdan Marinescu |
0:a792d4bf36c2 | 530 | * events out of irq contexts. |
Bogdan Marinescu |
0:a792d4bf36c2 | 531 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 532 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 533 | * @return A unique id that represents the posted event and can |
Bogdan Marinescu |
0:a792d4bf36c2 | 534 | * be passed to EventQueue::cancel, or an id of 0 if |
Bogdan Marinescu |
0:a792d4bf36c2 | 535 | * there is not enough memory to allocate the event. |
Bogdan Marinescu |
0:a792d4bf36c2 | 536 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 537 | int post(A0 a0) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 538 | if (!_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 539 | return 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 540 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 541 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 542 | _event->id = _event->post(_event, a0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 543 | return _event->id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 544 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 545 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 546 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 547 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 548 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 549 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 550 | void call(A0 a0) const { |
Christopher Haster |
8:773de146a61c | 551 | MBED_UNUSED int id = post(a0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 552 | MBED_ASSERT(id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 553 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 554 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 555 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 556 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 557 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 558 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 559 | void operator()(A0 a0) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 560 | return call(a0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 561 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 562 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 563 | /** Static thunk for passing as C-style function |
Bogdan Marinescu |
0:a792d4bf36c2 | 564 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 565 | * @param func Event to call passed as a void pointer |
Bogdan Marinescu |
0:a792d4bf36c2 | 566 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 567 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 568 | static void thunk(void *func, A0 a0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 569 | return static_cast<Event*>(func)->call(a0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 570 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 571 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 572 | /** Cancels the most recently posted event |
Bogdan Marinescu |
0:a792d4bf36c2 | 573 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 574 | * Attempts to cancel the most recently posted event. It is safe to call |
Bogdan Marinescu |
0:a792d4bf36c2 | 575 | * cancel after an event has already been dispatched. |
Bogdan Marinescu |
0:a792d4bf36c2 | 576 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 577 | * The cancel function is irq safe. |
Bogdan Marinescu |
0:a792d4bf36c2 | 578 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 579 | * If called while the event queue's dispatch loop is active, the cancel |
Bogdan Marinescu |
0:a792d4bf36c2 | 580 | * function does not garuntee that the event will not execute after it |
Bogdan Marinescu |
0:a792d4bf36c2 | 581 | * returns, as the event may have already begun executing. |
Bogdan Marinescu |
0:a792d4bf36c2 | 582 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 583 | void cancel() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 584 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 585 | equeue_cancel(_event->equeue, _event->id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 586 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 587 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 588 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 589 | private: |
Bogdan Marinescu |
0:a792d4bf36c2 | 590 | struct event { |
Bogdan Marinescu |
0:a792d4bf36c2 | 591 | unsigned ref; |
Bogdan Marinescu |
0:a792d4bf36c2 | 592 | equeue_t *equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 593 | int id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 594 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 595 | int delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 596 | int period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 597 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 598 | int (*post)(struct event *, A0 a0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 599 | void (*dtor)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 600 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 601 | // F follows |
Bogdan Marinescu |
0:a792d4bf36c2 | 602 | } *_event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 603 | |
Christopher Haster |
4:f157c7bf01cc | 604 | // Event attributes |
Christopher Haster |
4:f157c7bf01cc | 605 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 606 | static int event_post(struct event *e, A0 a0) { |
Christopher Haster |
4:f157c7bf01cc | 607 | typedef EventQueue::context10<F, A0> C; |
Christopher Haster |
4:f157c7bf01cc | 608 | void *p = equeue_alloc(e->equeue, sizeof(C)); |
Christopher Haster |
4:f157c7bf01cc | 609 | if (!p) { |
Christopher Haster |
4:f157c7bf01cc | 610 | return 0; |
Christopher Haster |
4:f157c7bf01cc | 611 | } |
Christopher Haster |
4:f157c7bf01cc | 612 | |
Christopher Haster |
4:f157c7bf01cc | 613 | new (p) C(*(F*)(e + 1), a0); |
Christopher Haster |
4:f157c7bf01cc | 614 | equeue_event_delay(p, e->delay); |
Christopher Haster |
4:f157c7bf01cc | 615 | equeue_event_period(p, e->period); |
Christopher Haster |
7:80510299c57c | 616 | equeue_event_dtor(p, &EventQueue::function_dtor<C>); |
Christopher Haster |
7:80510299c57c | 617 | return equeue_post(e->equeue, &EventQueue::function_call<C>, p); |
Christopher Haster |
4:f157c7bf01cc | 618 | } |
Christopher Haster |
4:f157c7bf01cc | 619 | |
Christopher Haster |
4:f157c7bf01cc | 620 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 621 | static void event_dtor(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 622 | ((F*)(e + 1))->~F(); |
Christopher Haster |
4:f157c7bf01cc | 623 | } |
Christopher Haster |
4:f157c7bf01cc | 624 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 625 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 626 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 627 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 628 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 629 | template <typename F, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 630 | Event(EventQueue *q, F f, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 631 | new (this) Event(q, EventQueue::context11<F, C0, A0>(f, c0)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 632 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 633 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 634 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 635 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 636 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 637 | template <typename F, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 638 | Event(EventQueue *q, F f, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 639 | new (this) Event(q, EventQueue::context21<F, C0, C1, A0>(f, c0, c1)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 640 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 641 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 642 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 643 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 644 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 645 | template <typename F, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 646 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 647 | new (this) Event(q, EventQueue::context31<F, C0, C1, C2, A0>(f, c0, c1, c2)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 648 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 649 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 650 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 651 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 652 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 653 | template <typename F, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 654 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 655 | new (this) Event(q, EventQueue::context41<F, C0, C1, C2, C3, A0>(f, c0, c1, c2, c3)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 656 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 657 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 658 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 659 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 660 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 661 | template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 662 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 663 | new (this) Event(q, EventQueue::context51<F, C0, C1, C2, C3, C4, A0>(f, c0, c1, c2, c3, c4)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 664 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 665 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 666 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 667 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 668 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 669 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 670 | Event(EventQueue *q, T *obj, R (T::*method)(B0, A0), B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 671 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 672 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 673 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 674 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 675 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 676 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 677 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 678 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0) const, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 679 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 680 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 681 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 682 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 683 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 684 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 685 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 686 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0) volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 687 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 688 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 689 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 690 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 691 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 692 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 693 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 694 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0) const volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 695 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 696 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 697 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 698 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 699 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 700 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 701 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 702 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0), B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 703 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 704 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 705 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 706 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 707 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 708 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 709 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 710 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0) const, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 711 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 712 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 713 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 714 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 715 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 716 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 717 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 718 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0) volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 719 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 720 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 721 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 722 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 723 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 724 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 725 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 726 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0) const volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 727 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 728 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 729 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 730 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 731 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 732 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 733 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 734 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0), B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 735 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 736 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 737 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 738 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 739 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 740 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 741 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 742 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0) const, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 743 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 744 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 745 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 746 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 747 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 748 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 749 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 750 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0) volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 751 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 752 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 753 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 754 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 755 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 756 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 757 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 758 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0) const volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 759 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 760 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 761 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 762 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 763 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 764 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 765 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 766 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0), B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 767 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 768 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 769 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 770 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 771 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 772 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 773 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 774 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0) const, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 775 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 776 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 777 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 778 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 779 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 780 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 781 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 782 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 783 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 784 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 785 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 786 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 787 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 788 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 789 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 790 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 791 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 792 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 793 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 794 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 795 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 796 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 797 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 798 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 799 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 800 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 801 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 802 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 803 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 804 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 805 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 806 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 807 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 808 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 809 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 810 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 811 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 812 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 813 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 814 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 815 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 816 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 817 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 818 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 819 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 820 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 821 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 822 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 823 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 824 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 825 | }; |
Bogdan Marinescu |
0:a792d4bf36c2 | 826 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 827 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 828 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 829 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 830 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 831 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 832 | template <typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 833 | class Event<void(A0, A1)> { |
Bogdan Marinescu |
0:a792d4bf36c2 | 834 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 835 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 836 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 837 | * Constructs an event bound to the specified event queue. The specified |
Bogdan Marinescu |
0:a792d4bf36c2 | 838 | * callback acts as the target for the event and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 839 | * context of the event queue's dispatch loop once posted. |
Bogdan Marinescu |
0:a792d4bf36c2 | 840 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 841 | * @param q Event queue to dispatch on |
Bogdan Marinescu |
0:a792d4bf36c2 | 842 | * @param f Function to execute when the event is dispatched |
Christopher Haster |
15:42ba4ffdf78d | 843 | * @param c0..c4 Arguments to bind to the callback, these arguments are |
Christopher Haster |
15:42ba4ffdf78d | 844 | * allocated on an irq-safe allocator from the event queue's |
Christopher Haster |
15:42ba4ffdf78d | 845 | * memory pool. Must be type-compatible with b0..b4, the |
Christopher Haster |
15:42ba4ffdf78d | 846 | * arguments to the underlying callback. |
Bogdan Marinescu |
0:a792d4bf36c2 | 847 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 848 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 849 | Event(EventQueue *q, F f) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 850 | _event = static_cast<struct event *>( |
Bogdan Marinescu |
0:a792d4bf36c2 | 851 | equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F))); |
Christopher Haster |
4:f157c7bf01cc | 852 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 853 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 854 | _event->equeue = &q->_equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 855 | _event->id = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 856 | _event->delay = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 857 | _event->period = -1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 858 | |
Christopher Haster |
4:f157c7bf01cc | 859 | _event->post = &Event::event_post<F>; |
Christopher Haster |
4:f157c7bf01cc | 860 | _event->dtor = &Event::event_dtor<F>; |
Bogdan Marinescu |
0:a792d4bf36c2 | 861 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 862 | new (_event+1) F(f); |
Bogdan Marinescu |
0:a792d4bf36c2 | 863 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 864 | _event->ref = 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 865 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 866 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 867 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 868 | /** Copy constructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 869 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 870 | Event(const Event &e) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 871 | _event = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 872 | if (e._event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 873 | _event = e._event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 874 | _event->ref += 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 875 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 876 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 877 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 878 | /** Assignment operator for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 879 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 880 | Event &operator=(const Event &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 881 | if (this != &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 882 | this->~Event(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 883 | new (this) Event(that); |
Bogdan Marinescu |
0:a792d4bf36c2 | 884 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 885 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 886 | return *this; |
Bogdan Marinescu |
0:a792d4bf36c2 | 887 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 888 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 889 | /** Destructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 890 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 891 | ~Event() { |
Bogdan Marinescu |
0:a792d4bf36c2 | 892 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 893 | _event->ref -= 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 894 | if (_event->ref == 0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 895 | _event->dtor(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 896 | equeue_dealloc(_event->equeue, _event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 897 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 898 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 899 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 900 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 901 | /** Configure the delay of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 902 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 903 | * @param delay Millisecond delay before dispatching the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 904 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 905 | void delay(int delay) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 906 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 907 | _event->delay = delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 908 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 909 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 910 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 911 | /** Configure the period of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 912 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 913 | * @param period Millisecond period for repeatedly dispatching an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 914 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 915 | void period(int period) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 916 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 917 | _event->period = period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 918 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 919 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 920 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 921 | /** Posts an event onto the underlying event queue |
Bogdan Marinescu |
0:a792d4bf36c2 | 922 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 923 | * The event is posted to the underlying queue and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 924 | * context of the event queue's dispatch loop. |
Bogdan Marinescu |
0:a792d4bf36c2 | 925 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 926 | * The post function is irq safe and can act as a mechanism for moving |
Bogdan Marinescu |
0:a792d4bf36c2 | 927 | * events out of irq contexts. |
Bogdan Marinescu |
0:a792d4bf36c2 | 928 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 929 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 930 | * @return A unique id that represents the posted event and can |
Bogdan Marinescu |
0:a792d4bf36c2 | 931 | * be passed to EventQueue::cancel, or an id of 0 if |
Bogdan Marinescu |
0:a792d4bf36c2 | 932 | * there is not enough memory to allocate the event. |
Bogdan Marinescu |
0:a792d4bf36c2 | 933 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 934 | int post(A0 a0, A1 a1) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 935 | if (!_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 936 | return 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 937 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 938 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 939 | _event->id = _event->post(_event, a0, a1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 940 | return _event->id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 941 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 942 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 943 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 944 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 945 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 946 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 947 | void call(A0 a0, A1 a1) const { |
Christopher Haster |
8:773de146a61c | 948 | MBED_UNUSED int id = post(a0, a1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 949 | MBED_ASSERT(id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 950 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 951 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 952 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 953 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 954 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 955 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 956 | void operator()(A0 a0, A1 a1) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 957 | return call(a0, a1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 958 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 959 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 960 | /** Static thunk for passing as C-style function |
Bogdan Marinescu |
0:a792d4bf36c2 | 961 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 962 | * @param func Event to call passed as a void pointer |
Bogdan Marinescu |
0:a792d4bf36c2 | 963 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 964 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 965 | static void thunk(void *func, A0 a0, A1 a1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 966 | return static_cast<Event*>(func)->call(a0, a1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 967 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 968 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 969 | /** Cancels the most recently posted event |
Bogdan Marinescu |
0:a792d4bf36c2 | 970 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 971 | * Attempts to cancel the most recently posted event. It is safe to call |
Bogdan Marinescu |
0:a792d4bf36c2 | 972 | * cancel after an event has already been dispatched. |
Bogdan Marinescu |
0:a792d4bf36c2 | 973 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 974 | * The cancel function is irq safe. |
Bogdan Marinescu |
0:a792d4bf36c2 | 975 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 976 | * If called while the event queue's dispatch loop is active, the cancel |
Bogdan Marinescu |
0:a792d4bf36c2 | 977 | * function does not garuntee that the event will not execute after it |
Bogdan Marinescu |
0:a792d4bf36c2 | 978 | * returns, as the event may have already begun executing. |
Bogdan Marinescu |
0:a792d4bf36c2 | 979 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 980 | void cancel() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 981 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 982 | equeue_cancel(_event->equeue, _event->id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 983 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 984 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 985 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 986 | private: |
Bogdan Marinescu |
0:a792d4bf36c2 | 987 | struct event { |
Bogdan Marinescu |
0:a792d4bf36c2 | 988 | unsigned ref; |
Bogdan Marinescu |
0:a792d4bf36c2 | 989 | equeue_t *equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 990 | int id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 991 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 992 | int delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 993 | int period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 994 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 995 | int (*post)(struct event *, A0 a0, A1 a1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 996 | void (*dtor)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 997 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 998 | // F follows |
Bogdan Marinescu |
0:a792d4bf36c2 | 999 | } *_event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1000 | |
Christopher Haster |
4:f157c7bf01cc | 1001 | // Event attributes |
Christopher Haster |
4:f157c7bf01cc | 1002 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 1003 | static int event_post(struct event *e, A0 a0, A1 a1) { |
Christopher Haster |
4:f157c7bf01cc | 1004 | typedef EventQueue::context20<F, A0, A1> C; |
Christopher Haster |
4:f157c7bf01cc | 1005 | void *p = equeue_alloc(e->equeue, sizeof(C)); |
Christopher Haster |
4:f157c7bf01cc | 1006 | if (!p) { |
Christopher Haster |
4:f157c7bf01cc | 1007 | return 0; |
Christopher Haster |
4:f157c7bf01cc | 1008 | } |
Christopher Haster |
4:f157c7bf01cc | 1009 | |
Christopher Haster |
4:f157c7bf01cc | 1010 | new (p) C(*(F*)(e + 1), a0, a1); |
Christopher Haster |
4:f157c7bf01cc | 1011 | equeue_event_delay(p, e->delay); |
Christopher Haster |
4:f157c7bf01cc | 1012 | equeue_event_period(p, e->period); |
Christopher Haster |
7:80510299c57c | 1013 | equeue_event_dtor(p, &EventQueue::function_dtor<C>); |
Christopher Haster |
7:80510299c57c | 1014 | return equeue_post(e->equeue, &EventQueue::function_call<C>, p); |
Christopher Haster |
4:f157c7bf01cc | 1015 | } |
Christopher Haster |
4:f157c7bf01cc | 1016 | |
Christopher Haster |
4:f157c7bf01cc | 1017 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 1018 | static void event_dtor(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 1019 | ((F*)(e + 1))->~F(); |
Christopher Haster |
4:f157c7bf01cc | 1020 | } |
Christopher Haster |
4:f157c7bf01cc | 1021 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1022 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1023 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1024 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1025 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1026 | template <typename F, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1027 | Event(EventQueue *q, F f, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1028 | new (this) Event(q, EventQueue::context12<F, C0, A0, A1>(f, c0)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1029 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1030 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1031 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1032 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1033 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1034 | template <typename F, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1035 | Event(EventQueue *q, F f, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1036 | new (this) Event(q, EventQueue::context22<F, C0, C1, A0, A1>(f, c0, c1)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1037 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1038 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1039 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1040 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1041 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1042 | template <typename F, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1043 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1044 | new (this) Event(q, EventQueue::context32<F, C0, C1, C2, A0, A1>(f, c0, c1, c2)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1045 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1046 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1047 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1048 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1049 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1050 | template <typename F, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1051 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1052 | new (this) Event(q, EventQueue::context42<F, C0, C1, C2, C3, A0, A1>(f, c0, c1, c2, c3)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1053 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1054 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1055 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1056 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1057 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1058 | template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1059 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1060 | new (this) Event(q, EventQueue::context52<F, C0, C1, C2, C3, C4, A0, A1>(f, c0, c1, c2, c3, c4)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1061 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1062 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1063 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1064 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1065 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1066 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1067 | Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1), B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1068 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1069 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1070 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1071 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1072 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1073 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1074 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1075 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1) const, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1076 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1077 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1078 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1079 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1080 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1081 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1082 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1083 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1) volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1084 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1085 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1086 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1087 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1088 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1089 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1090 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1091 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1) const volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1092 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1093 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1094 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1095 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1096 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1097 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1098 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1099 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1), B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1100 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1101 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1102 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1103 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1104 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1105 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1106 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1107 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1) const, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1108 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1109 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1110 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1111 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1112 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1113 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1114 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1115 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1) volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1116 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1117 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1118 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1119 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1120 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1121 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1122 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1123 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1) const volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1124 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1125 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1126 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1127 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1128 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1129 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1130 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1131 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1), B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1132 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1133 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1134 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1135 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1136 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1137 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1138 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1139 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1) const, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1140 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1141 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1142 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1143 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1144 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1145 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1146 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1147 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1148 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1149 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1150 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1151 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1152 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1153 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1154 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1155 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) const volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1156 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1157 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1158 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1159 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1160 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1161 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1162 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1163 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1), B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1164 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1165 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1166 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1167 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1168 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1169 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1170 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1171 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1172 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1173 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1174 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1175 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1176 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1177 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1178 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1179 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1180 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1181 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1182 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1183 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1184 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1185 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1186 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1187 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1188 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1189 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1190 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1191 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1192 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1193 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1194 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1195 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1196 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1197 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1198 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1199 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1200 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1201 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1202 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1203 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1204 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1205 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1206 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1207 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1208 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1209 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1210 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1211 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1212 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1213 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1214 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1215 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1216 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1217 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1218 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1219 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1220 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1221 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1222 | }; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1223 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1224 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1225 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1226 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 1227 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1228 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1229 | template <typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1230 | class Event<void(A0, A1, A2)> { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1231 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1232 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1233 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1234 | * Constructs an event bound to the specified event queue. The specified |
Bogdan Marinescu |
0:a792d4bf36c2 | 1235 | * callback acts as the target for the event and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 1236 | * context of the event queue's dispatch loop once posted. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1237 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1238 | * @param q Event queue to dispatch on |
Bogdan Marinescu |
0:a792d4bf36c2 | 1239 | * @param f Function to execute when the event is dispatched |
Christopher Haster |
15:42ba4ffdf78d | 1240 | * @param c0..c4 Arguments to bind to the callback, these arguments are |
Christopher Haster |
15:42ba4ffdf78d | 1241 | * allocated on an irq-safe allocator from the event queue's |
Christopher Haster |
15:42ba4ffdf78d | 1242 | * memory pool. Must be type-compatible with b0..b4, the |
Christopher Haster |
15:42ba4ffdf78d | 1243 | * arguments to the underlying callback. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1244 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1245 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1246 | Event(EventQueue *q, F f) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1247 | _event = static_cast<struct event *>( |
Bogdan Marinescu |
0:a792d4bf36c2 | 1248 | equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F))); |
Christopher Haster |
4:f157c7bf01cc | 1249 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1250 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1251 | _event->equeue = &q->_equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1252 | _event->id = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1253 | _event->delay = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1254 | _event->period = -1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1255 | |
Christopher Haster |
4:f157c7bf01cc | 1256 | _event->post = &Event::event_post<F>; |
Christopher Haster |
4:f157c7bf01cc | 1257 | _event->dtor = &Event::event_dtor<F>; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1258 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1259 | new (_event+1) F(f); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1260 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1261 | _event->ref = 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1262 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1263 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1264 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1265 | /** Copy constructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1266 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1267 | Event(const Event &e) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1268 | _event = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1269 | if (e._event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1270 | _event = e._event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1271 | _event->ref += 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1272 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1273 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1274 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1275 | /** Assignment operator for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1276 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1277 | Event &operator=(const Event &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1278 | if (this != &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1279 | this->~Event(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1280 | new (this) Event(that); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1281 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1282 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1283 | return *this; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1284 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1285 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1286 | /** Destructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1287 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1288 | ~Event() { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1289 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1290 | _event->ref -= 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1291 | if (_event->ref == 0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1292 | _event->dtor(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1293 | equeue_dealloc(_event->equeue, _event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1294 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1295 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1296 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1297 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1298 | /** Configure the delay of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1299 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1300 | * @param delay Millisecond delay before dispatching the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1301 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1302 | void delay(int delay) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1303 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1304 | _event->delay = delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1305 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1306 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1307 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1308 | /** Configure the period of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1309 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1310 | * @param period Millisecond period for repeatedly dispatching an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1311 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1312 | void period(int period) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1313 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1314 | _event->period = period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1315 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1316 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1317 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1318 | /** Posts an event onto the underlying event queue |
Bogdan Marinescu |
0:a792d4bf36c2 | 1319 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1320 | * The event is posted to the underlying queue and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 1321 | * context of the event queue's dispatch loop. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1322 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1323 | * The post function is irq safe and can act as a mechanism for moving |
Bogdan Marinescu |
0:a792d4bf36c2 | 1324 | * events out of irq contexts. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1325 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1326 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1327 | * @return A unique id that represents the posted event and can |
Bogdan Marinescu |
0:a792d4bf36c2 | 1328 | * be passed to EventQueue::cancel, or an id of 0 if |
Bogdan Marinescu |
0:a792d4bf36c2 | 1329 | * there is not enough memory to allocate the event. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1330 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1331 | int post(A0 a0, A1 a1, A2 a2) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1332 | if (!_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1333 | return 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1334 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1335 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1336 | _event->id = _event->post(_event, a0, a1, a2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1337 | return _event->id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1338 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1339 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1340 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 1341 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1342 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1343 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1344 | void call(A0 a0, A1 a1, A2 a2) const { |
Christopher Haster |
8:773de146a61c | 1345 | MBED_UNUSED int id = post(a0, a1, a2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1346 | MBED_ASSERT(id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1347 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1348 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1349 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 1350 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1351 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1352 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1353 | void operator()(A0 a0, A1 a1, A2 a2) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1354 | return call(a0, a1, a2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1355 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1356 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1357 | /** Static thunk for passing as C-style function |
Bogdan Marinescu |
0:a792d4bf36c2 | 1358 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1359 | * @param func Event to call passed as a void pointer |
Bogdan Marinescu |
0:a792d4bf36c2 | 1360 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1361 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1362 | static void thunk(void *func, A0 a0, A1 a1, A2 a2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1363 | return static_cast<Event*>(func)->call(a0, a1, a2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1364 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1365 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1366 | /** Cancels the most recently posted event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1367 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1368 | * Attempts to cancel the most recently posted event. It is safe to call |
Bogdan Marinescu |
0:a792d4bf36c2 | 1369 | * cancel after an event has already been dispatched. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1370 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1371 | * The cancel function is irq safe. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1372 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1373 | * If called while the event queue's dispatch loop is active, the cancel |
Bogdan Marinescu |
0:a792d4bf36c2 | 1374 | * function does not garuntee that the event will not execute after it |
Bogdan Marinescu |
0:a792d4bf36c2 | 1375 | * returns, as the event may have already begun executing. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1376 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1377 | void cancel() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1378 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1379 | equeue_cancel(_event->equeue, _event->id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1380 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1381 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1382 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1383 | private: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1384 | struct event { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1385 | unsigned ref; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1386 | equeue_t *equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1387 | int id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1388 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1389 | int delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1390 | int period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1391 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1392 | int (*post)(struct event *, A0 a0, A1 a1, A2 a2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1393 | void (*dtor)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1394 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1395 | // F follows |
Bogdan Marinescu |
0:a792d4bf36c2 | 1396 | } *_event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1397 | |
Christopher Haster |
4:f157c7bf01cc | 1398 | // Event attributes |
Christopher Haster |
4:f157c7bf01cc | 1399 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 1400 | static int event_post(struct event *e, A0 a0, A1 a1, A2 a2) { |
Christopher Haster |
4:f157c7bf01cc | 1401 | typedef EventQueue::context30<F, A0, A1, A2> C; |
Christopher Haster |
4:f157c7bf01cc | 1402 | void *p = equeue_alloc(e->equeue, sizeof(C)); |
Christopher Haster |
4:f157c7bf01cc | 1403 | if (!p) { |
Christopher Haster |
4:f157c7bf01cc | 1404 | return 0; |
Christopher Haster |
4:f157c7bf01cc | 1405 | } |
Christopher Haster |
4:f157c7bf01cc | 1406 | |
Christopher Haster |
4:f157c7bf01cc | 1407 | new (p) C(*(F*)(e + 1), a0, a1, a2); |
Christopher Haster |
4:f157c7bf01cc | 1408 | equeue_event_delay(p, e->delay); |
Christopher Haster |
4:f157c7bf01cc | 1409 | equeue_event_period(p, e->period); |
Christopher Haster |
7:80510299c57c | 1410 | equeue_event_dtor(p, &EventQueue::function_dtor<C>); |
Christopher Haster |
7:80510299c57c | 1411 | return equeue_post(e->equeue, &EventQueue::function_call<C>, p); |
Christopher Haster |
4:f157c7bf01cc | 1412 | } |
Christopher Haster |
4:f157c7bf01cc | 1413 | |
Christopher Haster |
4:f157c7bf01cc | 1414 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 1415 | static void event_dtor(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 1416 | ((F*)(e + 1))->~F(); |
Christopher Haster |
4:f157c7bf01cc | 1417 | } |
Christopher Haster |
4:f157c7bf01cc | 1418 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1419 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1420 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1421 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1422 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1423 | template <typename F, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1424 | Event(EventQueue *q, F f, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1425 | new (this) Event(q, EventQueue::context13<F, C0, A0, A1, A2>(f, c0)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1426 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1427 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1428 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1429 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1430 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1431 | template <typename F, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1432 | Event(EventQueue *q, F f, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1433 | new (this) Event(q, EventQueue::context23<F, C0, C1, A0, A1, A2>(f, c0, c1)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1434 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1435 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1436 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1437 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1438 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1439 | template <typename F, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1440 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1441 | new (this) Event(q, EventQueue::context33<F, C0, C1, C2, A0, A1, A2>(f, c0, c1, c2)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1442 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1443 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1444 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1445 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1446 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1447 | template <typename F, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1448 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1449 | new (this) Event(q, EventQueue::context43<F, C0, C1, C2, C3, A0, A1, A2>(f, c0, c1, c2, c3)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1450 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1451 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1452 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1453 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1454 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1455 | template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1456 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1457 | new (this) Event(q, EventQueue::context53<F, C0, C1, C2, C3, C4, A0, A1, A2>(f, c0, c1, c2, c3, c4)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1458 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1459 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1460 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1461 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1462 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1463 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1464 | Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1, A2), B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1465 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1466 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1467 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1468 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1469 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1470 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1471 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1472 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1, A2) const, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1473 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1474 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1475 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1476 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1477 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1478 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1479 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1480 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1, A2) volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1481 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1482 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1483 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1484 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1485 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1486 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1487 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1488 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1, A2) const volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1489 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1490 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1491 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1492 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1493 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1494 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1495 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1496 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1, A2), B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1497 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1498 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1499 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1500 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1501 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1502 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1503 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1504 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1, A2) const, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1505 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1506 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1507 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1508 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1509 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1510 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1511 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1512 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1513 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1514 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1515 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1516 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1517 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1518 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1519 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1520 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) const volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1521 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1522 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1523 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1524 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1525 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1526 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1527 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1528 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2), B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1529 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1530 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1531 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1532 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1533 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1534 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1535 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1536 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1537 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1538 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1539 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1540 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1541 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1542 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1543 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1544 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1545 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1546 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1547 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1548 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1549 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1550 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1551 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1552 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1553 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1554 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1555 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1556 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1557 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1558 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1559 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1560 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2), B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1561 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1562 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1563 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1564 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1565 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1566 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1567 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1568 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1569 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1570 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1571 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1572 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1573 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1574 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1575 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1576 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1577 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1578 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1579 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1580 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1581 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1582 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1583 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1584 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1585 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1586 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1587 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1588 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1589 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1590 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1591 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1592 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1593 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1594 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1595 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1596 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1597 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1598 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1599 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1600 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1601 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1602 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1603 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1604 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1605 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1606 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1607 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1608 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1609 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1610 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1611 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1612 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1613 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1614 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1615 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1616 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1617 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1618 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1619 | }; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1620 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1621 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1622 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1623 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 1624 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1625 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1626 | template <typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1627 | class Event<void(A0, A1, A2, A3)> { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1628 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1629 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1630 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1631 | * Constructs an event bound to the specified event queue. The specified |
Bogdan Marinescu |
0:a792d4bf36c2 | 1632 | * callback acts as the target for the event and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 1633 | * context of the event queue's dispatch loop once posted. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1634 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1635 | * @param q Event queue to dispatch on |
Bogdan Marinescu |
0:a792d4bf36c2 | 1636 | * @param f Function to execute when the event is dispatched |
Christopher Haster |
15:42ba4ffdf78d | 1637 | * @param c0..c4 Arguments to bind to the callback, these arguments are |
Christopher Haster |
15:42ba4ffdf78d | 1638 | * allocated on an irq-safe allocator from the event queue's |
Christopher Haster |
15:42ba4ffdf78d | 1639 | * memory pool. Must be type-compatible with b0..b4, the |
Christopher Haster |
15:42ba4ffdf78d | 1640 | * arguments to the underlying callback. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1641 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1642 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1643 | Event(EventQueue *q, F f) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1644 | _event = static_cast<struct event *>( |
Bogdan Marinescu |
0:a792d4bf36c2 | 1645 | equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F))); |
Christopher Haster |
4:f157c7bf01cc | 1646 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1647 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1648 | _event->equeue = &q->_equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1649 | _event->id = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1650 | _event->delay = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1651 | _event->period = -1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1652 | |
Christopher Haster |
4:f157c7bf01cc | 1653 | _event->post = &Event::event_post<F>; |
Christopher Haster |
4:f157c7bf01cc | 1654 | _event->dtor = &Event::event_dtor<F>; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1655 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1656 | new (_event+1) F(f); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1657 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1658 | _event->ref = 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1659 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1660 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1661 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1662 | /** Copy constructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1663 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1664 | Event(const Event &e) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1665 | _event = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1666 | if (e._event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1667 | _event = e._event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1668 | _event->ref += 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1669 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1670 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1671 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1672 | /** Assignment operator for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1673 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1674 | Event &operator=(const Event &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1675 | if (this != &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1676 | this->~Event(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1677 | new (this) Event(that); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1678 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1679 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1680 | return *this; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1681 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1682 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1683 | /** Destructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 1684 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1685 | ~Event() { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1686 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1687 | _event->ref -= 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1688 | if (_event->ref == 0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1689 | _event->dtor(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1690 | equeue_dealloc(_event->equeue, _event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1691 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1692 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1693 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1694 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1695 | /** Configure the delay of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1696 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1697 | * @param delay Millisecond delay before dispatching the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1698 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1699 | void delay(int delay) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1700 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1701 | _event->delay = delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1702 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1703 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1704 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1705 | /** Configure the period of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1706 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1707 | * @param period Millisecond period for repeatedly dispatching an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1708 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1709 | void period(int period) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1710 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1711 | _event->period = period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1712 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1713 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1714 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1715 | /** Posts an event onto the underlying event queue |
Bogdan Marinescu |
0:a792d4bf36c2 | 1716 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1717 | * The event is posted to the underlying queue and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 1718 | * context of the event queue's dispatch loop. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1719 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1720 | * The post function is irq safe and can act as a mechanism for moving |
Bogdan Marinescu |
0:a792d4bf36c2 | 1721 | * events out of irq contexts. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1722 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1723 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1724 | * @return A unique id that represents the posted event and can |
Bogdan Marinescu |
0:a792d4bf36c2 | 1725 | * be passed to EventQueue::cancel, or an id of 0 if |
Bogdan Marinescu |
0:a792d4bf36c2 | 1726 | * there is not enough memory to allocate the event. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1727 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1728 | int post(A0 a0, A1 a1, A2 a2, A3 a3) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1729 | if (!_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1730 | return 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1731 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1732 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1733 | _event->id = _event->post(_event, a0, a1, a2, a3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1734 | return _event->id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1735 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1736 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1737 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 1738 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1739 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1740 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1741 | void call(A0 a0, A1 a1, A2 a2, A3 a3) const { |
Christopher Haster |
8:773de146a61c | 1742 | MBED_UNUSED int id = post(a0, a1, a2, a3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1743 | MBED_ASSERT(id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1744 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1745 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1746 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 1747 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1748 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1749 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1750 | void operator()(A0 a0, A1 a1, A2 a2, A3 a3) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1751 | return call(a0, a1, a2, a3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1752 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1753 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1754 | /** Static thunk for passing as C-style function |
Bogdan Marinescu |
0:a792d4bf36c2 | 1755 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1756 | * @param func Event to call passed as a void pointer |
Bogdan Marinescu |
0:a792d4bf36c2 | 1757 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1758 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1759 | static void thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1760 | return static_cast<Event*>(func)->call(a0, a1, a2, a3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1761 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1762 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1763 | /** Cancels the most recently posted event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1764 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1765 | * Attempts to cancel the most recently posted event. It is safe to call |
Bogdan Marinescu |
0:a792d4bf36c2 | 1766 | * cancel after an event has already been dispatched. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1767 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1768 | * The cancel function is irq safe. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1769 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 1770 | * If called while the event queue's dispatch loop is active, the cancel |
Bogdan Marinescu |
0:a792d4bf36c2 | 1771 | * function does not garuntee that the event will not execute after it |
Bogdan Marinescu |
0:a792d4bf36c2 | 1772 | * returns, as the event may have already begun executing. |
Bogdan Marinescu |
0:a792d4bf36c2 | 1773 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1774 | void cancel() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1775 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1776 | equeue_cancel(_event->equeue, _event->id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1777 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1778 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1779 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1780 | private: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1781 | struct event { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1782 | unsigned ref; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1783 | equeue_t *equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1784 | int id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1785 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1786 | int delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1787 | int period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1788 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1789 | int (*post)(struct event *, A0 a0, A1 a1, A2 a2, A3 a3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1790 | void (*dtor)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1791 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1792 | // F follows |
Bogdan Marinescu |
0:a792d4bf36c2 | 1793 | } *_event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 1794 | |
Christopher Haster |
4:f157c7bf01cc | 1795 | // Event attributes |
Christopher Haster |
4:f157c7bf01cc | 1796 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 1797 | static int event_post(struct event *e, A0 a0, A1 a1, A2 a2, A3 a3) { |
Christopher Haster |
4:f157c7bf01cc | 1798 | typedef EventQueue::context40<F, A0, A1, A2, A3> C; |
Christopher Haster |
4:f157c7bf01cc | 1799 | void *p = equeue_alloc(e->equeue, sizeof(C)); |
Christopher Haster |
4:f157c7bf01cc | 1800 | if (!p) { |
Christopher Haster |
4:f157c7bf01cc | 1801 | return 0; |
Christopher Haster |
4:f157c7bf01cc | 1802 | } |
Christopher Haster |
4:f157c7bf01cc | 1803 | |
Christopher Haster |
4:f157c7bf01cc | 1804 | new (p) C(*(F*)(e + 1), a0, a1, a2, a3); |
Christopher Haster |
4:f157c7bf01cc | 1805 | equeue_event_delay(p, e->delay); |
Christopher Haster |
4:f157c7bf01cc | 1806 | equeue_event_period(p, e->period); |
Christopher Haster |
7:80510299c57c | 1807 | equeue_event_dtor(p, &EventQueue::function_dtor<C>); |
Christopher Haster |
7:80510299c57c | 1808 | return equeue_post(e->equeue, &EventQueue::function_call<C>, p); |
Christopher Haster |
4:f157c7bf01cc | 1809 | } |
Christopher Haster |
4:f157c7bf01cc | 1810 | |
Christopher Haster |
4:f157c7bf01cc | 1811 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 1812 | static void event_dtor(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 1813 | ((F*)(e + 1))->~F(); |
Christopher Haster |
4:f157c7bf01cc | 1814 | } |
Christopher Haster |
4:f157c7bf01cc | 1815 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1816 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 1817 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1818 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1819 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1820 | template <typename F, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1821 | Event(EventQueue *q, F f, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1822 | new (this) Event(q, EventQueue::context14<F, C0, A0, A1, A2, A3>(f, c0)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1823 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1824 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1825 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1826 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1827 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1828 | template <typename F, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1829 | Event(EventQueue *q, F f, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1830 | new (this) Event(q, EventQueue::context24<F, C0, C1, A0, A1, A2, A3>(f, c0, c1)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1831 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1832 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1833 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1834 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1835 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1836 | template <typename F, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1837 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1838 | new (this) Event(q, EventQueue::context34<F, C0, C1, C2, A0, A1, A2, A3>(f, c0, c1, c2)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1839 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1840 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1841 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1842 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1843 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1844 | template <typename F, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1845 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1846 | new (this) Event(q, EventQueue::context44<F, C0, C1, C2, C3, A0, A1, A2, A3>(f, c0, c1, c2, c3)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1847 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1848 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1849 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1850 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1851 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1852 | template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1853 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1854 | new (this) Event(q, EventQueue::context54<F, C0, C1, C2, C3, C4, A0, A1, A2, A3>(f, c0, c1, c2, c3, c4)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1855 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1856 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1857 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1858 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1859 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1860 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1861 | Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1, A2, A3), B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1862 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1863 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1864 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1865 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1866 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1867 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1868 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1869 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1, A2, A3) const, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1870 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1871 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1872 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1873 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1874 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1875 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1876 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1877 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1878 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1879 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1880 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1881 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1882 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1883 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1884 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1885 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) const volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1886 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1887 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1888 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1889 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1890 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1891 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1892 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1893 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3), B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1894 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1895 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1896 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1897 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1898 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1899 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1900 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1901 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1902 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1903 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1904 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1905 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1906 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1907 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1908 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1909 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1910 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1911 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1912 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1913 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1914 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1915 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1916 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1917 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1918 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1919 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1920 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1921 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1922 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1923 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1924 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1925 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3), B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1926 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1927 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1928 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1929 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1930 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1931 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1932 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1933 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1934 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1935 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1936 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1937 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1938 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1939 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1940 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1941 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1942 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1943 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1944 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1945 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1946 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1947 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1948 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1949 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1950 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1951 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1952 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1953 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1954 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1955 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1956 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1957 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3), B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1958 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1959 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1960 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1961 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1962 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1963 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1964 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1965 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1966 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1967 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1968 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1969 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1970 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1971 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1972 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1973 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1974 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1975 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1976 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1977 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1978 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1979 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1980 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1981 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1982 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1983 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1984 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1985 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1986 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1987 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1988 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1989 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1990 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1991 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 1992 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 1993 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1994 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 1995 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 1996 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 1997 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 1998 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 1999 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2000 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2001 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2002 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2003 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2004 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2005 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2006 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2007 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2008 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2009 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2010 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2011 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2012 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2013 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2014 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2015 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2016 | }; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2017 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2018 | /** Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2019 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2020 | * Representation of an event for fine-grain dispatch control |
Jimmy Brisson |
9822:fb4e93c12c32 | 2021 | * @ingroup events |
Bogdan Marinescu |
0:a792d4bf36c2 | 2022 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2023 | template <typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2024 | class Event<void(A0, A1, A2, A3, A4)> { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2025 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 2026 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2027 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2028 | * Constructs an event bound to the specified event queue. The specified |
Bogdan Marinescu |
0:a792d4bf36c2 | 2029 | * callback acts as the target for the event and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 2030 | * context of the event queue's dispatch loop once posted. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2031 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2032 | * @param q Event queue to dispatch on |
Bogdan Marinescu |
0:a792d4bf36c2 | 2033 | * @param f Function to execute when the event is dispatched |
Christopher Haster |
15:42ba4ffdf78d | 2034 | * @param c0..c4 Arguments to bind to the callback, these arguments are |
Christopher Haster |
15:42ba4ffdf78d | 2035 | * allocated on an irq-safe allocator from the event queue's |
Christopher Haster |
15:42ba4ffdf78d | 2036 | * memory pool. Must be type-compatible with b0..b4, the |
Christopher Haster |
15:42ba4ffdf78d | 2037 | * arguments to the underlying callback. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2038 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2039 | template <typename F> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2040 | Event(EventQueue *q, F f) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2041 | _event = static_cast<struct event *>( |
Bogdan Marinescu |
0:a792d4bf36c2 | 2042 | equeue_alloc(&q->_equeue, sizeof(struct event) + sizeof(F))); |
Christopher Haster |
4:f157c7bf01cc | 2043 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2044 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2045 | _event->equeue = &q->_equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2046 | _event->id = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2047 | _event->delay = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2048 | _event->period = -1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2049 | |
Christopher Haster |
4:f157c7bf01cc | 2050 | _event->post = &Event::event_post<F>; |
Christopher Haster |
4:f157c7bf01cc | 2051 | _event->dtor = &Event::event_dtor<F>; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2052 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2053 | new (_event+1) F(f); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2054 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2055 | _event->ref = 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2056 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2057 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2058 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2059 | /** Copy constructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 2060 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2061 | Event(const Event &e) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2062 | _event = 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2063 | if (e._event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2064 | _event = e._event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2065 | _event->ref += 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2066 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2067 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2068 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2069 | /** Assignment operator for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 2070 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2071 | Event &operator=(const Event &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2072 | if (this != &that) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2073 | this->~Event(); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2074 | new (this) Event(that); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2075 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2076 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2077 | return *this; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2078 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2079 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2080 | /** Destructor for events |
Bogdan Marinescu |
0:a792d4bf36c2 | 2081 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2082 | ~Event() { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2083 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2084 | _event->ref -= 1; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2085 | if (_event->ref == 0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2086 | _event->dtor(_event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2087 | equeue_dealloc(_event->equeue, _event); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2088 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2089 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2090 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2091 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2092 | /** Configure the delay of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2093 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2094 | * @param delay Millisecond delay before dispatching the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2095 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2096 | void delay(int delay) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2097 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2098 | _event->delay = delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2099 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2100 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2101 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2102 | /** Configure the period of an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2103 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2104 | * @param period Millisecond period for repeatedly dispatching an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2105 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2106 | void period(int period) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2107 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2108 | _event->period = period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2109 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2110 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2111 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2112 | /** Posts an event onto the underlying event queue |
Bogdan Marinescu |
0:a792d4bf36c2 | 2113 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2114 | * The event is posted to the underlying queue and is executed in the |
Bogdan Marinescu |
0:a792d4bf36c2 | 2115 | * context of the event queue's dispatch loop. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2116 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2117 | * The post function is irq safe and can act as a mechanism for moving |
Bogdan Marinescu |
0:a792d4bf36c2 | 2118 | * events out of irq contexts. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2119 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2120 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2121 | * @return A unique id that represents the posted event and can |
Bogdan Marinescu |
0:a792d4bf36c2 | 2122 | * be passed to EventQueue::cancel, or an id of 0 if |
Bogdan Marinescu |
0:a792d4bf36c2 | 2123 | * there is not enough memory to allocate the event. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2124 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2125 | int post(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2126 | if (!_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2127 | return 0; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2128 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2129 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2130 | _event->id = _event->post(_event, a0, a1, a2, a3, a4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2131 | return _event->id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2132 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2133 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2134 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 2135 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2136 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2137 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2138 | void call(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { |
Christopher Haster |
8:773de146a61c | 2139 | MBED_UNUSED int id = post(a0, a1, a2, a3, a4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2140 | MBED_ASSERT(id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2141 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2142 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2143 | /** Posts an event onto the underlying event queue, returning void |
Bogdan Marinescu |
0:a792d4bf36c2 | 2144 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2145 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2146 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2147 | void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2148 | return call(a0, a1, a2, a3, a4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2149 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2150 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2151 | /** Static thunk for passing as C-style function |
Bogdan Marinescu |
0:a792d4bf36c2 | 2152 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2153 | * @param func Event to call passed as a void pointer |
Bogdan Marinescu |
0:a792d4bf36c2 | 2154 | * @param a0..a4 Arguments to pass to the event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2155 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2156 | static void thunk(void *func, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2157 | return static_cast<Event*>(func)->call(a0, a1, a2, a3, a4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2158 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2159 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2160 | /** Cancels the most recently posted event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2161 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2162 | * Attempts to cancel the most recently posted event. It is safe to call |
Bogdan Marinescu |
0:a792d4bf36c2 | 2163 | * cancel after an event has already been dispatched. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2164 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2165 | * The cancel function is irq safe. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2166 | * |
Bogdan Marinescu |
0:a792d4bf36c2 | 2167 | * If called while the event queue's dispatch loop is active, the cancel |
Bogdan Marinescu |
0:a792d4bf36c2 | 2168 | * function does not garuntee that the event will not execute after it |
Bogdan Marinescu |
0:a792d4bf36c2 | 2169 | * returns, as the event may have already begun executing. |
Bogdan Marinescu |
0:a792d4bf36c2 | 2170 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2171 | void cancel() const { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2172 | if (_event) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2173 | equeue_cancel(_event->equeue, _event->id); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2174 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2175 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2176 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2177 | private: |
Bogdan Marinescu |
0:a792d4bf36c2 | 2178 | struct event { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2179 | unsigned ref; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2180 | equeue_t *equeue; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2181 | int id; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2182 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2183 | int delay; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2184 | int period; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2185 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2186 | int (*post)(struct event *, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2187 | void (*dtor)(struct event *); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2188 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2189 | // F follows |
Bogdan Marinescu |
0:a792d4bf36c2 | 2190 | } *_event; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2191 | |
Christopher Haster |
4:f157c7bf01cc | 2192 | // Event attributes |
Christopher Haster |
4:f157c7bf01cc | 2193 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 2194 | static int event_post(struct event *e, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { |
Christopher Haster |
4:f157c7bf01cc | 2195 | typedef EventQueue::context50<F, A0, A1, A2, A3, A4> C; |
Christopher Haster |
4:f157c7bf01cc | 2196 | void *p = equeue_alloc(e->equeue, sizeof(C)); |
Christopher Haster |
4:f157c7bf01cc | 2197 | if (!p) { |
Christopher Haster |
4:f157c7bf01cc | 2198 | return 0; |
Christopher Haster |
4:f157c7bf01cc | 2199 | } |
Christopher Haster |
4:f157c7bf01cc | 2200 | |
Christopher Haster |
4:f157c7bf01cc | 2201 | new (p) C(*(F*)(e + 1), a0, a1, a2, a3, a4); |
Christopher Haster |
4:f157c7bf01cc | 2202 | equeue_event_delay(p, e->delay); |
Christopher Haster |
4:f157c7bf01cc | 2203 | equeue_event_period(p, e->period); |
Christopher Haster |
7:80510299c57c | 2204 | equeue_event_dtor(p, &EventQueue::function_dtor<C>); |
Christopher Haster |
7:80510299c57c | 2205 | return equeue_post(e->equeue, &EventQueue::function_call<C>, p); |
Christopher Haster |
4:f157c7bf01cc | 2206 | } |
Christopher Haster |
4:f157c7bf01cc | 2207 | |
Christopher Haster |
4:f157c7bf01cc | 2208 | template <typename F> |
Christopher Haster |
4:f157c7bf01cc | 2209 | static void event_dtor(struct event *e) { |
Christopher Haster |
4:f157c7bf01cc | 2210 | ((F*)(e + 1))->~F(); |
Christopher Haster |
4:f157c7bf01cc | 2211 | } |
Christopher Haster |
4:f157c7bf01cc | 2212 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2213 | public: |
Bogdan Marinescu |
0:a792d4bf36c2 | 2214 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2215 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2216 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2217 | template <typename F, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2218 | Event(EventQueue *q, F f, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2219 | new (this) Event(q, EventQueue::context15<F, C0, A0, A1, A2, A3, A4>(f, c0)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2220 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2221 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2222 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2223 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2224 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2225 | template <typename F, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2226 | Event(EventQueue *q, F f, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2227 | new (this) Event(q, EventQueue::context25<F, C0, C1, A0, A1, A2, A3, A4>(f, c0, c1)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2228 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2229 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2230 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2231 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2232 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2233 | template <typename F, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2234 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2235 | new (this) Event(q, EventQueue::context35<F, C0, C1, C2, A0, A1, A2, A3, A4>(f, c0, c1, c2)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2236 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2237 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2238 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2239 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2240 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2241 | template <typename F, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2242 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2243 | new (this) Event(q, EventQueue::context45<F, C0, C1, C2, C3, A0, A1, A2, A3, A4>(f, c0, c1, c2, c3)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2244 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2245 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2246 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2247 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2248 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2249 | template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2250 | Event(EventQueue *q, F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2251 | new (this) Event(q, EventQueue::context55<F, C0, C1, C2, C3, C4, A0, A1, A2, A3, A4>(f, c0, c1, c2, c3, c4)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2252 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2253 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2254 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2255 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2256 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2257 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2258 | Event(EventQueue *q, T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4), B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2259 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2260 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2261 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2262 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2263 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2264 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2265 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2266 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2267 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2268 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2269 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2270 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2271 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2272 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2273 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2274 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2275 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2276 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2277 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2278 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2279 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2280 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2281 | template <typename T, typename R, typename B0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2282 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const volatile, B0 b0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2283 | new (this) Event(q, mbed::callback(obj, method), b0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2284 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2285 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2286 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2287 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2288 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2289 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2290 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4), B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2291 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2292 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2293 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2294 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2295 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2296 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2297 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2298 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2299 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2300 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2301 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2302 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2303 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2304 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2305 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2306 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2307 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2308 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2309 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2310 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2311 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2312 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2313 | template <typename T, typename R, typename B0, typename B1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2314 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2315 | new (this) Event(q, mbed::callback(obj, method), b0, b1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2316 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2317 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2318 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2319 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2320 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2321 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2322 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4), B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2323 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2324 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2325 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2326 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2327 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2328 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2329 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2330 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2331 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2332 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2333 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2334 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2335 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2336 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2337 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2338 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2339 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2340 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2341 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2342 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2343 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2344 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2345 | template <typename T, typename R, typename B0, typename B1, typename B2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2346 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1, B2 b2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2347 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2348 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2349 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2350 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2351 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2352 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2353 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2354 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4), B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2355 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2356 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2357 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2358 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2359 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2360 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2361 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2362 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2363 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2364 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2365 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2366 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2367 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2368 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2369 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2370 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2371 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2372 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2373 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2374 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2375 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2376 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2377 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2378 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1, B2 b2, B3 b3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2379 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2380 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2381 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2382 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2383 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2384 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2385 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2386 | Event(EventQueue *q, T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2387 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2388 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2389 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2390 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2391 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2392 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2393 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2394 | Event(EventQueue *q, const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2395 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2396 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2397 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2398 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2399 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2400 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2401 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2402 | Event(EventQueue *q, volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2403 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2404 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2405 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2406 | /** Create an event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2407 | * @see Event::Event |
Bogdan Marinescu |
0:a792d4bf36c2 | 2408 | */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2409 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2410 | Event(EventQueue *q, const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const volatile, B0 b0, B1 b1, B2 b2, B3 b3, B4 b4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2411 | new (this) Event(q, mbed::callback(obj, method), b0, b1, b2, b3, b4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2412 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2413 | }; |
Bogdan Marinescu |
0:a792d4bf36c2 | 2414 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2415 | |
Jimmy Brisson |
9822:fb4e93c12c32 | 2416 | /** \addtogroup events */ |
Jimmy Brisson |
9822:fb4e93c12c32 | 2417 | /** @{ */ |
Bogdan Marinescu |
0:a792d4bf36c2 | 2418 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2419 | // Convenience functions declared here to avoid cyclic |
Bogdan Marinescu |
0:a792d4bf36c2 | 2420 | // dependency between Event and EventQueue |
Bogdan Marinescu |
0:a792d4bf36c2 | 2421 | template <typename R> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2422 | Event<void()> EventQueue::event(R (*func)()) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2423 | return Event<void()>(this, func); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2424 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2425 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2426 | template <typename T, typename R> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2427 | Event<void()> EventQueue::event(T *obj, R (T::*method)()) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2428 | return Event<void()>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2429 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2430 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2431 | template <typename T, typename R> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2432 | Event<void()> EventQueue::event(const T *obj, R (T::*method)() const) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2433 | return Event<void()>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2434 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2435 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2436 | template <typename T, typename R> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2437 | Event<void()> EventQueue::event(volatile T *obj, R (T::*method)() volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2438 | return Event<void()>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2439 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2440 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2441 | template <typename T, typename R> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2442 | Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)() const volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2443 | return Event<void()>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2444 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2445 | |
Christopher Haster |
14:65535458dd6f | 2446 | template <typename R> |
Christopher Haster |
14:65535458dd6f | 2447 | Event<void()> EventQueue::event(mbed::Callback<R()> cb) { |
Christopher Haster |
14:65535458dd6f | 2448 | return Event<void()>(this, cb); |
Christopher Haster |
14:65535458dd6f | 2449 | } |
Christopher Haster |
14:65535458dd6f | 2450 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2451 | template <typename R, typename B0, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2452 | Event<void()> EventQueue::event(R (*func)(B0), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2453 | return Event<void()>(this, func, c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2454 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2455 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2456 | template <typename T, typename R, typename B0, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2457 | Event<void()> EventQueue::event(T *obj, R (T::*method)(B0), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2458 | return Event<void()>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2459 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2460 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2461 | template <typename T, typename R, typename B0, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2462 | Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0) const, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2463 | return Event<void()>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2464 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2465 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2466 | template <typename T, typename R, typename B0, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2467 | Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0) volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2468 | return Event<void()>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2469 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2470 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2471 | template <typename T, typename R, typename B0, typename C0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2472 | Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0) const volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2473 | return Event<void()>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2474 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2475 | |
Christopher Haster |
14:65535458dd6f | 2476 | template <typename R, typename B0, typename C0> |
Christopher Haster |
14:65535458dd6f | 2477 | Event<void()> EventQueue::event(mbed::Callback<R(B0)> cb, C0 c0) { |
Christopher Haster |
14:65535458dd6f | 2478 | return Event<void()>(this, cb, c0); |
Christopher Haster |
14:65535458dd6f | 2479 | } |
Christopher Haster |
14:65535458dd6f | 2480 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2481 | template <typename R, typename B0, typename B1, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2482 | Event<void()> EventQueue::event(R (*func)(B0, B1), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2483 | return Event<void()>(this, func, c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2484 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2485 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2486 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2487 | Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2488 | return Event<void()>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2489 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2490 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2491 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2492 | Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1) const, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2493 | return Event<void()>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2494 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2495 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2496 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2497 | Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1) volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2498 | return Event<void()>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2499 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2500 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2501 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2502 | Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1) const volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2503 | return Event<void()>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2504 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2505 | |
Christopher Haster |
14:65535458dd6f | 2506 | template <typename R, typename B0, typename B1, typename C0, typename C1> |
Christopher Haster |
14:65535458dd6f | 2507 | Event<void()> EventQueue::event(mbed::Callback<R(B0, B1)> cb, C0 c0, C1 c1) { |
Christopher Haster |
14:65535458dd6f | 2508 | return Event<void()>(this, cb, c0, c1); |
Christopher Haster |
14:65535458dd6f | 2509 | } |
Christopher Haster |
14:65535458dd6f | 2510 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2511 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2512 | Event<void()> EventQueue::event(R (*func)(B0, B1, B2), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2513 | return Event<void()>(this, func, c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2514 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2515 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2516 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2517 | Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2518 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2519 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2520 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2521 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2522 | Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2) const, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2523 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2524 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2525 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2526 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2527 | Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2) volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2528 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2529 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2530 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2531 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2532 | Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2) const volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2533 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2534 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2535 | |
Christopher Haster |
14:65535458dd6f | 2536 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> |
Christopher Haster |
14:65535458dd6f | 2537 | Event<void()> EventQueue::event(mbed::Callback<R(B0, B1, B2)> cb, C0 c0, C1 c1, C2 c2) { |
Christopher Haster |
14:65535458dd6f | 2538 | return Event<void()>(this, cb, c0, c1, c2); |
Christopher Haster |
14:65535458dd6f | 2539 | } |
Christopher Haster |
14:65535458dd6f | 2540 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2541 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2542 | Event<void()> EventQueue::event(R (*func)(B0, B1, B2, B3), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2543 | return Event<void()>(this, func, c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2544 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2545 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2546 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2547 | Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2548 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2549 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2550 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2551 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2552 | Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3) const, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2553 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2554 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2555 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2556 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2557 | Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3) volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2558 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2559 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2560 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2561 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2562 | Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2563 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2564 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2565 | |
Christopher Haster |
14:65535458dd6f | 2566 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> |
Christopher Haster |
14:65535458dd6f | 2567 | Event<void()> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3)> cb, C0 c0, C1 c1, C2 c2, C3 c3) { |
Christopher Haster |
14:65535458dd6f | 2568 | return Event<void()>(this, cb, c0, c1, c2, c3); |
Christopher Haster |
14:65535458dd6f | 2569 | } |
Christopher Haster |
14:65535458dd6f | 2570 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2571 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2572 | Event<void()> EventQueue::event(R (*func)(B0, B1, B2, B3, B4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2573 | return Event<void()>(this, func, c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2574 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2575 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2576 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2577 | Event<void()> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2578 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2579 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2580 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2581 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2582 | Event<void()> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2583 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2584 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2585 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2586 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2587 | Event<void()> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2588 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2589 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2590 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2591 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2592 | Event<void()> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2593 | return Event<void()>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2594 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2595 | |
Christopher Haster |
14:65535458dd6f | 2596 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> |
Christopher Haster |
14:65535458dd6f | 2597 | Event<void()> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Christopher Haster |
14:65535458dd6f | 2598 | return Event<void()>(this, cb, c0, c1, c2, c3, c4); |
Christopher Haster |
14:65535458dd6f | 2599 | } |
Christopher Haster |
14:65535458dd6f | 2600 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2601 | template <typename R, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2602 | Event<void(A0)> EventQueue::event(R (*func)(A0)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2603 | return Event<void(A0)>(this, func); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2604 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2605 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2606 | template <typename T, typename R, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2607 | Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(A0)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2608 | return Event<void(A0)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2609 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2610 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2611 | template <typename T, typename R, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2612 | Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(A0) const) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2613 | return Event<void(A0)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2614 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2615 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2616 | template <typename T, typename R, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2617 | Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(A0) volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2618 | return Event<void(A0)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2619 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2620 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2621 | template <typename T, typename R, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2622 | Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(A0) const volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2623 | return Event<void(A0)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2624 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2625 | |
Christopher Haster |
14:65535458dd6f | 2626 | template <typename R, typename A0> |
Christopher Haster |
14:65535458dd6f | 2627 | Event<void(A0)> EventQueue::event(mbed::Callback<R(A0)> cb) { |
Christopher Haster |
14:65535458dd6f | 2628 | return Event<void(A0)>(this, cb); |
Christopher Haster |
14:65535458dd6f | 2629 | } |
Christopher Haster |
14:65535458dd6f | 2630 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2631 | template <typename R, typename B0, typename C0, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2632 | Event<void(A0)> EventQueue::event(R (*func)(B0, A0), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2633 | return Event<void(A0)>(this, func, c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2634 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2635 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2636 | template <typename T, typename R, typename B0, typename C0, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2637 | Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, A0), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2638 | return Event<void(A0)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2639 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2640 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2641 | template <typename T, typename R, typename B0, typename C0, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2642 | Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, A0) const, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2643 | return Event<void(A0)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2644 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2645 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2646 | template <typename T, typename R, typename B0, typename C0, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2647 | Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0) volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2648 | return Event<void(A0)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2649 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2650 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2651 | template <typename T, typename R, typename B0, typename C0, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2652 | Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0) const volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2653 | return Event<void(A0)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2654 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2655 | |
Christopher Haster |
14:65535458dd6f | 2656 | template <typename R, typename B0, typename C0, typename A0> |
Christopher Haster |
14:65535458dd6f | 2657 | Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, A0)> cb, C0 c0) { |
Christopher Haster |
14:65535458dd6f | 2658 | return Event<void(A0)>(this, cb, c0); |
Christopher Haster |
14:65535458dd6f | 2659 | } |
Christopher Haster |
14:65535458dd6f | 2660 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2661 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2662 | Event<void(A0)> EventQueue::event(R (*func)(B0, B1, A0), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2663 | return Event<void(A0)>(this, func, c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2664 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2665 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2666 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2667 | Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2668 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2669 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2670 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2671 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2672 | Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0) const, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2673 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2674 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2675 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2676 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2677 | Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0) volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2678 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2679 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2680 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2681 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2682 | Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0) const volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2683 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2684 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2685 | |
Christopher Haster |
14:65535458dd6f | 2686 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0> |
Christopher Haster |
14:65535458dd6f | 2687 | Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, A0)> cb, C0 c0, C1 c1) { |
Christopher Haster |
14:65535458dd6f | 2688 | return Event<void(A0)>(this, cb, c0, c1); |
Christopher Haster |
14:65535458dd6f | 2689 | } |
Christopher Haster |
14:65535458dd6f | 2690 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2691 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2692 | Event<void(A0)> EventQueue::event(R (*func)(B0, B1, B2, A0), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2693 | return Event<void(A0)>(this, func, c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2694 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2695 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2696 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2697 | Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2698 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2699 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2700 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2701 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2702 | Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0) const, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2703 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2704 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2705 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2706 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2707 | Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0) volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2708 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2709 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2710 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2711 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2712 | Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0) const volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2713 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2714 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2715 | |
Christopher Haster |
14:65535458dd6f | 2716 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> |
Christopher Haster |
14:65535458dd6f | 2717 | Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0)> cb, C0 c0, C1 c1, C2 c2) { |
Christopher Haster |
14:65535458dd6f | 2718 | return Event<void(A0)>(this, cb, c0, c1, c2); |
Christopher Haster |
14:65535458dd6f | 2719 | } |
Christopher Haster |
14:65535458dd6f | 2720 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2721 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2722 | Event<void(A0)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2723 | return Event<void(A0)>(this, func, c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2724 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2725 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2726 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2727 | Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2728 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2729 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2730 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2731 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2732 | Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0) const, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2733 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2734 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2735 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2736 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2737 | Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2738 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2739 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2740 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2741 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2742 | Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2743 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2744 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2745 | |
Christopher Haster |
14:65535458dd6f | 2746 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> |
Christopher Haster |
14:65535458dd6f | 2747 | Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0)> cb, C0 c0, C1 c1, C2 c2, C3 c3) { |
Christopher Haster |
14:65535458dd6f | 2748 | return Event<void(A0)>(this, cb, c0, c1, c2, c3); |
Christopher Haster |
14:65535458dd6f | 2749 | } |
Christopher Haster |
14:65535458dd6f | 2750 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2751 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2752 | Event<void(A0)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2753 | return Event<void(A0)>(this, func, c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2754 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2755 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2756 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2757 | Event<void(A0)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2758 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2759 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2760 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2761 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2762 | Event<void(A0)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2763 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2764 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2765 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2766 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2767 | Event<void(A0)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2768 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2769 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2770 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2771 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2772 | Event<void(A0)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2773 | return Event<void(A0)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2774 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2775 | |
Christopher Haster |
14:65535458dd6f | 2776 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> |
Christopher Haster |
14:65535458dd6f | 2777 | Event<void(A0)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Christopher Haster |
14:65535458dd6f | 2778 | return Event<void(A0)>(this, cb, c0, c1, c2, c3, c4); |
Christopher Haster |
14:65535458dd6f | 2779 | } |
Christopher Haster |
14:65535458dd6f | 2780 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2781 | template <typename R, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2782 | Event<void(A0, A1)> EventQueue::event(R (*func)(A0, A1)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2783 | return Event<void(A0, A1)>(this, func); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2784 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2785 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2786 | template <typename T, typename R, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2787 | Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(A0, A1)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2788 | return Event<void(A0, A1)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2789 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2790 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2791 | template <typename T, typename R, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2792 | Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(A0, A1) const) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2793 | return Event<void(A0, A1)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2794 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2795 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2796 | template <typename T, typename R, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2797 | Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1) volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2798 | return Event<void(A0, A1)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2799 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2800 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2801 | template <typename T, typename R, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2802 | Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1) const volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2803 | return Event<void(A0, A1)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2804 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2805 | |
Christopher Haster |
14:65535458dd6f | 2806 | template <typename R, typename A0, typename A1> |
Christopher Haster |
14:65535458dd6f | 2807 | Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(A0, A1)> cb) { |
Christopher Haster |
14:65535458dd6f | 2808 | return Event<void(A0, A1)>(this, cb); |
Christopher Haster |
14:65535458dd6f | 2809 | } |
Christopher Haster |
14:65535458dd6f | 2810 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2811 | template <typename R, typename B0, typename C0, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2812 | Event<void(A0, A1)> EventQueue::event(R (*func)(B0, A0, A1), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2813 | return Event<void(A0, A1)>(this, func, c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2814 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2815 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2816 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2817 | Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2818 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2819 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2820 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2821 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2822 | Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1) const, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2823 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2824 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2825 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2826 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2827 | Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1) volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2828 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2829 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2830 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2831 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2832 | Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1) const volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2833 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2834 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2835 | |
Christopher Haster |
14:65535458dd6f | 2836 | template <typename R, typename B0, typename C0, typename A0, typename A1> |
Christopher Haster |
14:65535458dd6f | 2837 | Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, A0, A1)> cb, C0 c0) { |
Christopher Haster |
14:65535458dd6f | 2838 | return Event<void(A0, A1)>(this, cb, c0); |
Christopher Haster |
14:65535458dd6f | 2839 | } |
Christopher Haster |
14:65535458dd6f | 2840 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2841 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2842 | Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, A0, A1), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2843 | return Event<void(A0, A1)>(this, func, c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2844 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2845 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2846 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2847 | Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2848 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2849 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2850 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2851 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2852 | Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1) const, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2853 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2854 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2855 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2856 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2857 | Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1) volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2858 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2859 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2860 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2861 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2862 | Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1) const volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2863 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2864 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2865 | |
Christopher Haster |
14:65535458dd6f | 2866 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> |
Christopher Haster |
14:65535458dd6f | 2867 | Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1)> cb, C0 c0, C1 c1) { |
Christopher Haster |
14:65535458dd6f | 2868 | return Event<void(A0, A1)>(this, cb, c0, c1); |
Christopher Haster |
14:65535458dd6f | 2869 | } |
Christopher Haster |
14:65535458dd6f | 2870 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2871 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2872 | Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2873 | return Event<void(A0, A1)>(this, func, c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2874 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2875 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2876 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2877 | Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2878 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2879 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2880 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2881 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2882 | Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1) const, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2883 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2884 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2885 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2886 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2887 | Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2888 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2889 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2890 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2891 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2892 | Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) const volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2893 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2894 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2895 | |
Christopher Haster |
14:65535458dd6f | 2896 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> |
Christopher Haster |
14:65535458dd6f | 2897 | Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1)> cb, C0 c0, C1 c1, C2 c2) { |
Christopher Haster |
14:65535458dd6f | 2898 | return Event<void(A0, A1)>(this, cb, c0, c1, c2); |
Christopher Haster |
14:65535458dd6f | 2899 | } |
Christopher Haster |
14:65535458dd6f | 2900 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2901 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2902 | Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2903 | return Event<void(A0, A1)>(this, func, c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2904 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2905 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2906 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2907 | Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2908 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2909 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2910 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2911 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2912 | Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2913 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2914 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2915 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2916 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2917 | Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2918 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2919 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2920 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2921 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2922 | Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2923 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2924 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2925 | |
Christopher Haster |
14:65535458dd6f | 2926 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> |
Christopher Haster |
14:65535458dd6f | 2927 | Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1)> cb, C0 c0, C1 c1, C2 c2, C3 c3) { |
Christopher Haster |
14:65535458dd6f | 2928 | return Event<void(A0, A1)>(this, cb, c0, c1, c2, c3); |
Christopher Haster |
14:65535458dd6f | 2929 | } |
Christopher Haster |
14:65535458dd6f | 2930 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2931 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2932 | Event<void(A0, A1)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2933 | return Event<void(A0, A1)>(this, func, c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2934 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2935 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2936 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2937 | Event<void(A0, A1)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2938 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2939 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2940 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2941 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2942 | Event<void(A0, A1)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2943 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2944 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2945 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2946 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2947 | Event<void(A0, A1)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2948 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2949 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2950 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2951 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2952 | Event<void(A0, A1)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2953 | return Event<void(A0, A1)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2954 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2955 | |
Christopher Haster |
14:65535458dd6f | 2956 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> |
Christopher Haster |
14:65535458dd6f | 2957 | Event<void(A0, A1)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Christopher Haster |
14:65535458dd6f | 2958 | return Event<void(A0, A1)>(this, cb, c0, c1, c2, c3, c4); |
Christopher Haster |
14:65535458dd6f | 2959 | } |
Christopher Haster |
14:65535458dd6f | 2960 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2961 | template <typename R, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2962 | Event<void(A0, A1, A2)> EventQueue::event(R (*func)(A0, A1, A2)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2963 | return Event<void(A0, A1, A2)>(this, func); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2964 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2965 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2966 | template <typename T, typename R, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2967 | Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(A0, A1, A2)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2968 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2969 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2970 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2971 | template <typename T, typename R, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2972 | Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(A0, A1, A2) const) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2973 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2974 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2975 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2976 | template <typename T, typename R, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2977 | Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1, A2) volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2978 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2979 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2980 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2981 | template <typename T, typename R, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2982 | Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1, A2) const volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2983 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2984 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2985 | |
Christopher Haster |
14:65535458dd6f | 2986 | template <typename R, typename A0, typename A1, typename A2> |
Christopher Haster |
14:65535458dd6f | 2987 | Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(A0, A1, A2)> cb) { |
Christopher Haster |
14:65535458dd6f | 2988 | return Event<void(A0, A1, A2)>(this, cb); |
Christopher Haster |
14:65535458dd6f | 2989 | } |
Christopher Haster |
14:65535458dd6f | 2990 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2991 | template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2992 | Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, A0, A1, A2), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2993 | return Event<void(A0, A1, A2)>(this, func, c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2994 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 2995 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 2996 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 2997 | Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1, A2), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 2998 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 2999 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3000 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3001 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3002 | Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1, A2) const, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3003 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3004 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3005 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3006 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3007 | Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1, A2) volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3008 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3009 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3010 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3011 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3012 | Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2) const volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3013 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3014 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3015 | |
Christopher Haster |
14:65535458dd6f | 3016 | template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2> |
Christopher Haster |
14:65535458dd6f | 3017 | Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, A0, A1, A2)> cb, C0 c0) { |
Christopher Haster |
14:65535458dd6f | 3018 | return Event<void(A0, A1, A2)>(this, cb, c0); |
Christopher Haster |
14:65535458dd6f | 3019 | } |
Christopher Haster |
14:65535458dd6f | 3020 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3021 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3022 | Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, A0, A1, A2), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3023 | return Event<void(A0, A1, A2)>(this, func, c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3024 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3025 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3026 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3027 | Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1, A2), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3028 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3029 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3030 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3031 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3032 | Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2) const, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3033 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3034 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3035 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3036 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3037 | Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3038 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3039 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3040 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3041 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3042 | Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) const volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3043 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3044 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3045 | |
Christopher Haster |
14:65535458dd6f | 3046 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> |
Christopher Haster |
14:65535458dd6f | 3047 | Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1, A2)> cb, C0 c0, C1 c1) { |
Christopher Haster |
14:65535458dd6f | 3048 | return Event<void(A0, A1, A2)>(this, cb, c0, c1); |
Christopher Haster |
14:65535458dd6f | 3049 | } |
Christopher Haster |
14:65535458dd6f | 3050 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3051 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3052 | Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1, A2), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3053 | return Event<void(A0, A1, A2)>(this, func, c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3054 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3055 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3056 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3057 | Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3058 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3059 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3060 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3061 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3062 | Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3063 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3064 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3065 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3066 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3067 | Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3068 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3069 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3070 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3071 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3072 | Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3073 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3074 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3075 | |
Christopher Haster |
14:65535458dd6f | 3076 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> |
Christopher Haster |
14:65535458dd6f | 3077 | Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2) { |
Christopher Haster |
14:65535458dd6f | 3078 | return Event<void(A0, A1, A2)>(this, cb, c0, c1, c2); |
Christopher Haster |
14:65535458dd6f | 3079 | } |
Christopher Haster |
14:65535458dd6f | 3080 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3081 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3082 | Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3083 | return Event<void(A0, A1, A2)>(this, func, c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3084 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3085 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3086 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3087 | Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3088 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3089 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3090 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3091 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3092 | Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3093 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3094 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3095 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3096 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3097 | Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3098 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3099 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3100 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3101 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3102 | Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3103 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3104 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3105 | |
Christopher Haster |
14:65535458dd6f | 3106 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> |
Christopher Haster |
14:65535458dd6f | 3107 | Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2, C3 c3) { |
Christopher Haster |
14:65535458dd6f | 3108 | return Event<void(A0, A1, A2)>(this, cb, c0, c1, c2, c3); |
Christopher Haster |
14:65535458dd6f | 3109 | } |
Christopher Haster |
14:65535458dd6f | 3110 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3111 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3112 | Event<void(A0, A1, A2)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3113 | return Event<void(A0, A1, A2)>(this, func, c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3114 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3115 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3116 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3117 | Event<void(A0, A1, A2)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3118 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3119 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3120 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3121 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3122 | Event<void(A0, A1, A2)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3123 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3124 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3125 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3126 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3127 | Event<void(A0, A1, A2)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3128 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3129 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3130 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3131 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3132 | Event<void(A0, A1, A2)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3133 | return Event<void(A0, A1, A2)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3134 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3135 | |
Christopher Haster |
14:65535458dd6f | 3136 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> |
Christopher Haster |
14:65535458dd6f | 3137 | Event<void(A0, A1, A2)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Christopher Haster |
14:65535458dd6f | 3138 | return Event<void(A0, A1, A2)>(this, cb, c0, c1, c2, c3, c4); |
Christopher Haster |
14:65535458dd6f | 3139 | } |
Christopher Haster |
14:65535458dd6f | 3140 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3141 | template <typename R, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3142 | Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(A0, A1, A2, A3)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3143 | return Event<void(A0, A1, A2, A3)>(this, func); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3144 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3145 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3146 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3147 | Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(A0, A1, A2, A3)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3148 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3149 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3150 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3151 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3152 | Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(A0, A1, A2, A3) const) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3153 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3154 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3155 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3156 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3157 | Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1, A2, A3) volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3158 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3159 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3160 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3161 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3162 | Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1, A2, A3) const volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3163 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3164 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3165 | |
Christopher Haster |
14:65535458dd6f | 3166 | template <typename R, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
14:65535458dd6f | 3167 | Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(A0, A1, A2, A3)> cb) { |
Christopher Haster |
14:65535458dd6f | 3168 | return Event<void(A0, A1, A2, A3)>(this, cb); |
Christopher Haster |
14:65535458dd6f | 3169 | } |
Christopher Haster |
14:65535458dd6f | 3170 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3171 | template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3172 | Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, A0, A1, A2, A3), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3173 | return Event<void(A0, A1, A2, A3)>(this, func, c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3174 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3175 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3176 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3177 | Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1, A2, A3), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3178 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3179 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3180 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3181 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3182 | Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1, A2, A3) const, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3183 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3184 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3185 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3186 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3187 | Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3188 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3189 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3190 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3191 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3192 | Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) const volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3193 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3194 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3195 | |
Christopher Haster |
14:65535458dd6f | 3196 | template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
14:65535458dd6f | 3197 | Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, A0, A1, A2, A3)> cb, C0 c0) { |
Christopher Haster |
14:65535458dd6f | 3198 | return Event<void(A0, A1, A2, A3)>(this, cb, c0); |
Christopher Haster |
14:65535458dd6f | 3199 | } |
Christopher Haster |
14:65535458dd6f | 3200 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3201 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3202 | Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, A0, A1, A2, A3), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3203 | return Event<void(A0, A1, A2, A3)>(this, func, c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3204 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3205 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3206 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3207 | Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3208 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3209 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3210 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3211 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3212 | Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3213 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3214 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3215 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3216 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3217 | Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3218 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3219 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3220 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3221 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3222 | Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3223 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3224 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3225 | |
Christopher Haster |
14:65535458dd6f | 3226 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
14:65535458dd6f | 3227 | Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1, A2, A3)> cb, C0 c0, C1 c1) { |
Christopher Haster |
14:65535458dd6f | 3228 | return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1); |
Christopher Haster |
14:65535458dd6f | 3229 | } |
Christopher Haster |
14:65535458dd6f | 3230 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3231 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3232 | Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3233 | return Event<void(A0, A1, A2, A3)>(this, func, c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3234 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3235 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3236 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3237 | Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3238 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3239 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3240 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3241 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3242 | Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3243 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3244 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3245 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3246 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3247 | Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3248 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3249 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3250 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3251 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3252 | Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3253 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3254 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3255 | |
Christopher Haster |
14:65535458dd6f | 3256 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
14:65535458dd6f | 3257 | Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2) { |
Christopher Haster |
14:65535458dd6f | 3258 | return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1, c2); |
Christopher Haster |
14:65535458dd6f | 3259 | } |
Christopher Haster |
14:65535458dd6f | 3260 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3261 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3262 | Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3263 | return Event<void(A0, A1, A2, A3)>(this, func, c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3264 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3265 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3266 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3267 | Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3268 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3269 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3270 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3271 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3272 | Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3273 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3274 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3275 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3276 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3277 | Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3278 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3279 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3280 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3281 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3282 | Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3283 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3284 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3285 | |
Christopher Haster |
14:65535458dd6f | 3286 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
14:65535458dd6f | 3287 | Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2, C3 c3) { |
Christopher Haster |
14:65535458dd6f | 3288 | return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1, c2, c3); |
Christopher Haster |
14:65535458dd6f | 3289 | } |
Christopher Haster |
14:65535458dd6f | 3290 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3291 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3292 | Event<void(A0, A1, A2, A3)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3293 | return Event<void(A0, A1, A2, A3)>(this, func, c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3294 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3295 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3296 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3297 | Event<void(A0, A1, A2, A3)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3298 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3299 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3300 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3301 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3302 | Event<void(A0, A1, A2, A3)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3303 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3304 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3305 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3306 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3307 | Event<void(A0, A1, A2, A3)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3308 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3309 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3310 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3311 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3312 | Event<void(A0, A1, A2, A3)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3313 | return Event<void(A0, A1, A2, A3)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3314 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3315 | |
Christopher Haster |
14:65535458dd6f | 3316 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> |
Christopher Haster |
14:65535458dd6f | 3317 | Event<void(A0, A1, A2, A3)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Christopher Haster |
14:65535458dd6f | 3318 | return Event<void(A0, A1, A2, A3)>(this, cb, c0, c1, c2, c3, c4); |
Christopher Haster |
14:65535458dd6f | 3319 | } |
Christopher Haster |
14:65535458dd6f | 3320 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3321 | template <typename R, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3322 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(A0, A1, A2, A3, A4)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3323 | return Event<void(A0, A1, A2, A3, A4)>(this, func); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3324 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3325 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3326 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3327 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(A0, A1, A2, A3, A4)) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3328 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3329 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3330 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3331 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3332 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(A0, A1, A2, A3, A4) const) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3333 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3334 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3335 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3336 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3337 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3338 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3339 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3340 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3341 | template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3342 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3343 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method)); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3344 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3345 | |
Christopher Haster |
14:65535458dd6f | 3346 | template <typename R, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
14:65535458dd6f | 3347 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(A0, A1, A2, A3, A4)> cb) { |
Christopher Haster |
14:65535458dd6f | 3348 | return Event<void(A0, A1, A2, A3, A4)>(this, cb); |
Christopher Haster |
14:65535458dd6f | 3349 | } |
Christopher Haster |
14:65535458dd6f | 3350 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3351 | template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3352 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, A0, A1, A2, A3, A4), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3353 | return Event<void(A0, A1, A2, A3, A4)>(this, func, c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3354 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3355 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3356 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3357 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4), C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3358 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3359 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3360 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3361 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3362 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3363 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3364 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3365 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3366 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3367 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3368 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3369 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3370 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3371 | template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3372 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const volatile, C0 c0) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3373 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3374 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3375 | |
Christopher Haster |
14:65535458dd6f | 3376 | template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
14:65535458dd6f | 3377 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, A0, A1, A2, A3, A4)> cb, C0 c0) { |
Christopher Haster |
14:65535458dd6f | 3378 | return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0); |
Christopher Haster |
14:65535458dd6f | 3379 | } |
Christopher Haster |
14:65535458dd6f | 3380 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3381 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3382 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, A0, A1, A2, A3, A4), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3383 | return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3384 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3385 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3386 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3387 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4), C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3388 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3389 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3390 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3391 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3392 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3393 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3394 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3395 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3396 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3397 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3398 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3399 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3400 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3401 | template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3402 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3403 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3404 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3405 | |
Christopher Haster |
14:65535458dd6f | 3406 | template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
14:65535458dd6f | 3407 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1) { |
Christopher Haster |
14:65535458dd6f | 3408 | return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1); |
Christopher Haster |
14:65535458dd6f | 3409 | } |
Christopher Haster |
14:65535458dd6f | 3410 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3411 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3412 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, B2, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3413 | return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3414 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3415 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3416 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3417 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3418 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3419 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3420 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3421 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3422 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3423 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3424 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3425 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3426 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3427 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3428 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3429 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3430 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3431 | template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3432 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3433 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3434 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3435 | |
Christopher Haster |
14:65535458dd6f | 3436 | template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
14:65535458dd6f | 3437 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, B2, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2) { |
Christopher Haster |
14:65535458dd6f | 3438 | return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1, c2); |
Christopher Haster |
14:65535458dd6f | 3439 | } |
Christopher Haster |
14:65535458dd6f | 3440 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3441 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3442 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, B2, B3, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3443 | return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3444 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3445 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3446 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3447 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3448 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3449 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3450 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3451 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3452 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3453 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3454 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3455 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3456 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3457 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3458 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3459 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3460 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3461 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3462 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2, C3 c3) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3463 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3464 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3465 | |
Christopher Haster |
14:65535458dd6f | 3466 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
14:65535458dd6f | 3467 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2, C3 c3) { |
Christopher Haster |
14:65535458dd6f | 3468 | return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1, c2, c3); |
Christopher Haster |
14:65535458dd6f | 3469 | } |
Christopher Haster |
14:65535458dd6f | 3470 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3471 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3472 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3473 | return Event<void(A0, A1, A2, A3, A4)>(this, func, c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3474 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3475 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3476 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3477 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3478 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3479 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3480 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3481 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3482 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3483 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3484 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3485 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3486 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3487 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3488 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3489 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3490 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3491 | template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> |
Bogdan Marinescu |
0:a792d4bf36c2 | 3492 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Bogdan Marinescu |
0:a792d4bf36c2 | 3493 | return Event<void(A0, A1, A2, A3, A4)>(this, mbed::callback(obj, method), c0, c1, c2, c3, c4); |
Bogdan Marinescu |
0:a792d4bf36c2 | 3494 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3495 | |
Christopher Haster |
14:65535458dd6f | 3496 | template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> |
Christopher Haster |
14:65535458dd6f | 3497 | Event<void(A0, A1, A2, A3, A4)> EventQueue::event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) { |
Christopher Haster |
14:65535458dd6f | 3498 | return Event<void(A0, A1, A2, A3, A4)>(this, cb, c0, c1, c2, c3, c4); |
Christopher Haster |
14:65535458dd6f | 3499 | } |
Christopher Haster |
14:65535458dd6f | 3500 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3501 | } |
Bogdan Marinescu |
0:a792d4bf36c2 | 3502 | |
Bogdan Marinescu |
0:a792d4bf36c2 | 3503 | #endif |
Jimmy Brisson |
5:705843a08e16 | 3504 | |
Jimmy Brisson |
5:705843a08e16 | 3505 | /** @}*/ |