Nathan Yonkee / Mbed 2 deprecated Nucleo_sinewave_output_copy

Dependencies:   mbed

Committer:
Nathan Yonkee
Date:
Fri Mar 02 07:16:49 2018 -0700
Revision:
10:46a4cf51ee38
Parent:
9:d58e77ebd769
remove mbed-os

Who changed what in which revision?

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