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