takashi kadono / Mbed OS Nucleo446_SSD1331

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

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