Rahul Dahiya / Mbed OS STM32F7 Ethernet
Committer:
rahul_dahiya
Date:
Wed Jan 15 15:57:15 2020 +0530
Revision:
0:fb8047b156bb
STM32F7 LWIP

Who changed what in which revision?

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