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