BA
/
BaBoRo1
Embed:
(wiki syntax)
Show/hide line numbers
EventQueue.h
00001 /* events 00002 * Copyright (c) 2016 ARM Limited 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #ifndef EVENT_QUEUE_H 00018 #define EVENT_QUEUE_H 00019 00020 #include "equeue/equeue.h" 00021 #include "platform/Callback.h" 00022 #include "platform/NonCopyable.h" 00023 #include <cstddef> 00024 #include <new> 00025 00026 namespace events { 00027 /** \addtogroup events */ 00028 00029 /** EVENTS_EVENT_SIZE 00030 * Minimum size of an event 00031 * This size fits a Callback<void()> at minimum 00032 */ 00033 #define EVENTS_EVENT_SIZE \ 00034 (EQUEUE_EVENT_SIZE - 2*sizeof(void*) + sizeof(mbed::Callback<void()>)) 00035 00036 /** EVENTS_QUEUE_SIZE 00037 * Default size of buffer for events 00038 */ 00039 #define EVENTS_QUEUE_SIZE (32*EVENTS_EVENT_SIZE) 00040 00041 // Predeclared classes 00042 template <typename F> 00043 class Event; 00044 00045 00046 /** EventQueue 00047 * 00048 * Flexible event queue for dispatching events 00049 * @ingroup events 00050 */ 00051 class EventQueue : private mbed::NonCopyable<EventQueue> { 00052 public: 00053 /** Create an EventQueue 00054 * 00055 * Create an event queue. The event queue either allocates a buffer of 00056 * the specified size with malloc or uses the user provided buffer. 00057 * 00058 * @param size Size of buffer to use for events in bytes 00059 * (default to EVENTS_QUEUE_SIZE) 00060 * @param buffer Pointer to buffer to use for events 00061 * (default to NULL) 00062 */ 00063 EventQueue(unsigned size=EVENTS_QUEUE_SIZE, unsigned char *buffer=NULL); 00064 00065 /** Destroy an EventQueue 00066 */ 00067 ~EventQueue(); 00068 00069 /** Dispatch events 00070 * 00071 * Executes events until the specified milliseconds have passed. 00072 * If ms is negative, the dispatch function will dispatch events 00073 * indefinitely or until break_dispatch is called on this queue. 00074 * 00075 * When called with a finite timeout, the dispatch function is guaranteed 00076 * to terminate. When called with a timeout of 0, the dispatch function 00077 * does not wait and is irq safe. 00078 * 00079 * @param ms Time to wait for events in milliseconds, a negative 00080 * value will dispatch events indefinitely 00081 * (default to -1) 00082 */ 00083 void dispatch(int ms=-1); 00084 00085 /** Dispatch events without a timeout 00086 * 00087 * This is equivalent to EventQueue::dispatch with no arguments, but 00088 * avoids overload ambiguities when passed as a callback. 00089 * 00090 * @see EventQueue::dispatch 00091 */ 00092 void dispatch_forever() { dispatch(); } 00093 00094 /** Break out of a running event loop 00095 * 00096 * Forces the specified event queue's dispatch loop to terminate. Pending 00097 * events may finish executing, but no new events will be executed. 00098 */ 00099 void break_dispatch(); 00100 00101 /** Millisecond counter 00102 * 00103 * Returns the underlying tick of the event queue represented as the 00104 * number of milliseconds that have passed since an arbitrary point in 00105 * time. Intentionally overflows to 0 after 2^32-1. 00106 * 00107 * @return The underlying tick of the event queue in milliseconds 00108 */ 00109 unsigned tick(); 00110 00111 /** Cancel an in-flight event 00112 * 00113 * Attempts to cancel an event referenced by the unique id returned from 00114 * one of the call functions. It is safe to call cancel after an event 00115 * has already been dispatched. 00116 * 00117 * The cancel function is irq safe. 00118 * 00119 * If called while the event queue's dispatch loop is active, the cancel 00120 * function does not guarantee that the event will not execute after it 00121 * returns, as the event may have already begun executing. 00122 * 00123 * @param id Unique id of the event 00124 */ 00125 void cancel(int id); 00126 00127 /** Background an event queue onto a single-shot timer-interrupt 00128 * 00129 * When updated, the event queue will call the provided update function 00130 * with a timeout indicating when the queue should be dispatched. A 00131 * negative timeout will be passed to the update function when the 00132 * timer-interrupt is no longer needed. 00133 * 00134 * Passing a null function disables the existing update function. 00135 * 00136 * The background function allows an event queue to take advantage of 00137 * hardware timers or other event loops, allowing an event queue to be 00138 * ran in the background without consuming the foreground thread. 00139 * 00140 * @param update Function called to indicate when the queue should be 00141 * dispatched 00142 */ 00143 void background(mbed::Callback<void(int)> update); 00144 00145 /** Chain an event queue onto another event queue 00146 * 00147 * After chaining a queue to a target, calling dispatch on the target 00148 * queue will also dispatch events from this queue. The queues use 00149 * their own buffers and events must be handled independently. 00150 * 00151 * A null queue as the target will unchain the existing queue. 00152 * 00153 * The chain function allows multiple event queues to be composed, 00154 * sharing the context of a dispatch loop while still being managed 00155 * independently 00156 * 00157 * @param target Queue that will dispatch this queue's events as a 00158 * part of its dispatch loop 00159 */ 00160 void chain(EventQueue *target); 00161 00162 /** Calls an event on the queue 00163 * 00164 * The specified callback will be executed in the context of the event 00165 * queue's dispatch loop. 00166 * 00167 * The call function is irq safe and can act as a mechanism for moving 00168 * events out of irq contexts. 00169 * 00170 * @param f Function to execute in the context of the dispatch loop 00171 * @return A unique id that represents the posted event and can 00172 * be passed to cancel, or an id of 0 if there is not 00173 * enough memory to allocate the event. 00174 */ 00175 template <typename F> 00176 int call(F f) { 00177 void *p = equeue_alloc(&_equeue, sizeof(F)); 00178 if (!p) { 00179 return 0; 00180 } 00181 00182 F *e = new (p) F(f); 00183 equeue_event_dtor(e, &EventQueue::function_dtor<F>); 00184 return equeue_post(&_equeue, &EventQueue::function_call<F>, e); 00185 } 00186 00187 /** Calls an event on the queue 00188 * @see EventQueue::call 00189 * @param f Function to execute in the context of the dispatch loop 00190 * @param a0 Argument to pass to the callback 00191 */ 00192 template <typename F, typename A0> 00193 int call(F f, A0 a0) { 00194 return call(context10<F, A0>(f, a0)); 00195 } 00196 00197 /** Calls an event on the queue 00198 * @see EventQueue::call 00199 * @param f Function to execute in the context of the dispatch loop 00200 * @param a0,a1 Arguments to pass to the callback 00201 */ 00202 template <typename F, typename A0, typename A1> 00203 int call(F f, A0 a0, A1 a1) { 00204 return call(context20<F, A0, A1>(f, a0, a1)); 00205 } 00206 00207 /** Calls an event on the queue 00208 * @see EventQueue::call 00209 * @param f Function to execute in the context of the dispatch loop 00210 * @param a0,a1,a2 Arguments to pass to the callback 00211 */ 00212 template <typename F, typename A0, typename A1, typename A2> 00213 int call(F f, A0 a0, A1 a1, A2 a2) { 00214 return call(context30<F, A0, A1, A2>(f, a0, a1, a2)); 00215 } 00216 00217 /** Calls an event on the queue 00218 * @see EventQueue::call 00219 * @param f Function to execute in the context of the dispatch loop 00220 * @param a0,a1,a2,a3 Arguments to pass to the callback 00221 */ 00222 template <typename F, typename A0, typename A1, typename A2, typename A3> 00223 int call(F f, A0 a0, A1 a1, A2 a2, A3 a3) { 00224 return call(context40<F, A0, A1, A2, A3>(f, a0, a1, a2, a3)); 00225 } 00226 00227 /** Calls an event on the queue 00228 * @see EventQueue::call 00229 * @param f Function to execute in the context of the dispatch loop 00230 * @param a0,a1,a2,a3,a4 Arguments to pass to the callback 00231 */ 00232 template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> 00233 int call(F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00234 return call(context50<F, A0, A1, A2, A3, A4>(f, a0, a1, a2, a3, a4)); 00235 } 00236 00237 /** Calls an event on the queue 00238 * @see EventQueue::call 00239 */ 00240 template <typename T, typename R> 00241 int call(T *obj, R (T::*method)()) { 00242 return call(mbed::callback(obj, method)); 00243 } 00244 00245 /** Calls an event on the queue 00246 * @see EventQueue::call 00247 */ 00248 template <typename T, typename R> 00249 int call(const T *obj, R (T::*method)() const) { 00250 return call(mbed::callback(obj, method)); 00251 } 00252 00253 /** Calls an event on the queue 00254 * @see EventQueue::call 00255 */ 00256 template <typename T, typename R> 00257 int call(volatile T *obj, R (T::*method)() volatile) { 00258 return call(mbed::callback(obj, method)); 00259 } 00260 00261 /** Calls an event on the queue 00262 * @see EventQueue::call 00263 */ 00264 template <typename T, typename R> 00265 int call(const volatile T *obj, R (T::*method)() const volatile) { 00266 return call(mbed::callback(obj, method)); 00267 } 00268 00269 /** Calls an event on the queue 00270 * @see EventQueue::call 00271 */ 00272 template <typename T, typename R, typename A0> 00273 int call(T *obj, R (T::*method)(A0), A0 a0) { 00274 return call(mbed::callback(obj, method), a0); 00275 } 00276 00277 /** Calls an event on the queue 00278 * @see EventQueue::call 00279 */ 00280 template <typename T, typename R, typename A0> 00281 int call(const T *obj, R (T::*method)(A0) const, A0 a0) { 00282 return call(mbed::callback(obj, method), a0); 00283 } 00284 00285 /** Calls an event on the queue 00286 * @see EventQueue::call 00287 */ 00288 template <typename T, typename R, typename A0> 00289 int call(volatile T *obj, R (T::*method)(A0) volatile, A0 a0) { 00290 return call(mbed::callback(obj, method), a0); 00291 } 00292 00293 /** Calls an event on the queue 00294 * @see EventQueue::call 00295 */ 00296 template <typename T, typename R, typename A0> 00297 int call(const volatile T *obj, R (T::*method)(A0) const volatile, A0 a0) { 00298 return call(mbed::callback(obj, method), a0); 00299 } 00300 00301 /** Calls an event on the queue 00302 * @see EventQueue::call 00303 */ 00304 template <typename T, typename R, typename A0, typename A1> 00305 int call(T *obj, R (T::*method)(A0, A1), A0 a0, A1 a1) { 00306 return call(mbed::callback(obj, method), a0, a1); 00307 } 00308 00309 /** Calls an event on the queue 00310 * @see EventQueue::call 00311 */ 00312 template <typename T, typename R, typename A0, typename A1> 00313 int call(const T *obj, R (T::*method)(A0, A1) const, A0 a0, A1 a1) { 00314 return call(mbed::callback(obj, method), a0, a1); 00315 } 00316 00317 /** Calls an event on the queue 00318 * @see EventQueue::call 00319 */ 00320 template <typename T, typename R, typename A0, typename A1> 00321 int call(volatile T *obj, R (T::*method)(A0, A1) volatile, A0 a0, A1 a1) { 00322 return call(mbed::callback(obj, method), a0, a1); 00323 } 00324 00325 /** Calls an event on the queue 00326 * @see EventQueue::call 00327 */ 00328 template <typename T, typename R, typename A0, typename A1> 00329 int call(const volatile T *obj, R (T::*method)(A0, A1) const volatile, A0 a0, A1 a1) { 00330 return call(mbed::callback(obj, method), a0, a1); 00331 } 00332 00333 /** Calls an event on the queue 00334 * @see EventQueue::call 00335 */ 00336 template <typename T, typename R, typename A0, typename A1, typename A2> 00337 int call(T *obj, R (T::*method)(A0, A1, A2), A0 a0, A1 a1, A2 a2) { 00338 return call(mbed::callback(obj, method), a0, a1, a2); 00339 } 00340 00341 /** Calls an event on the queue 00342 * @see EventQueue::call 00343 */ 00344 template <typename T, typename R, typename A0, typename A1, typename A2> 00345 int call(const T *obj, R (T::*method)(A0, A1, A2) const, A0 a0, A1 a1, A2 a2) { 00346 return call(mbed::callback(obj, method), a0, a1, a2); 00347 } 00348 00349 /** Calls an event on the queue 00350 * @see EventQueue::call 00351 */ 00352 template <typename T, typename R, typename A0, typename A1, typename A2> 00353 int call(volatile T *obj, R (T::*method)(A0, A1, A2) volatile, A0 a0, A1 a1, A2 a2) { 00354 return call(mbed::callback(obj, method), a0, a1, a2); 00355 } 00356 00357 /** Calls an event on the queue 00358 * @see EventQueue::call 00359 */ 00360 template <typename T, typename R, typename A0, typename A1, typename A2> 00361 int call(const volatile T *obj, R (T::*method)(A0, A1, A2) const volatile, A0 a0, A1 a1, A2 a2) { 00362 return call(mbed::callback(obj, method), a0, a1, a2); 00363 } 00364 00365 /** Calls an event on the queue 00366 * @see EventQueue::call 00367 */ 00368 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00369 int call(T *obj, R (T::*method)(A0, A1, A2, A3), A0 a0, A1 a1, A2 a2, A3 a3) { 00370 return call(mbed::callback(obj, method), a0, a1, a2, a3); 00371 } 00372 00373 /** Calls an event on the queue 00374 * @see EventQueue::call 00375 */ 00376 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00377 int call(const T *obj, R (T::*method)(A0, A1, A2, A3) const, A0 a0, A1 a1, A2 a2, A3 a3) { 00378 return call(mbed::callback(obj, method), a0, a1, a2, a3); 00379 } 00380 00381 /** Calls an event on the queue 00382 * @see EventQueue::call 00383 */ 00384 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00385 int call(volatile T *obj, R (T::*method)(A0, A1, A2, A3) volatile, A0 a0, A1 a1, A2 a2, A3 a3) { 00386 return call(mbed::callback(obj, method), a0, a1, a2, a3); 00387 } 00388 00389 /** Calls an event on the queue 00390 * @see EventQueue::call 00391 */ 00392 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00393 int call(const volatile T *obj, R (T::*method)(A0, A1, A2, A3) const volatile, A0 a0, A1 a1, A2 a2, A3 a3) { 00394 return call(mbed::callback(obj, method), a0, a1, a2, a3); 00395 } 00396 00397 /** Calls an event on the queue 00398 * @see EventQueue::call 00399 */ 00400 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00401 int call(T *obj, R (T::*method)(A0, A1, A2, A3, A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00402 return call(mbed::callback(obj, method), a0, a1, a2, a3, a4); 00403 } 00404 00405 /** Calls an event on the queue 00406 * @see EventQueue::call 00407 */ 00408 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00409 int call(const T *obj, R (T::*method)(A0, A1, A2, A3, A4) const, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00410 return call(mbed::callback(obj, method), a0, a1, a2, a3, a4); 00411 } 00412 00413 /** Calls an event on the queue 00414 * @see EventQueue::call 00415 */ 00416 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00417 int call(volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00418 return call(mbed::callback(obj, method), a0, a1, a2, a3, a4); 00419 } 00420 00421 /** Calls an event on the queue 00422 * @see EventQueue::call 00423 */ 00424 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00425 int call(const volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00426 return call(mbed::callback(obj, method), a0, a1, a2, a3, a4); 00427 } 00428 00429 /** Calls an event on the queue after a specified delay 00430 * 00431 * The specified callback will be executed in the context of the event 00432 * queue's dispatch loop. 00433 * 00434 * The call_in function is irq safe and can act as a mechanism for moving 00435 * events out of irq contexts. 00436 * 00437 * @param f Function to execute in the context of the dispatch loop 00438 * @param ms Time to delay in milliseconds 00439 * @return A unique id that represents the posted event and can 00440 * be passed to cancel, or an id of 0 if there is not 00441 * enough memory to allocate the event. 00442 */ 00443 template <typename F> 00444 int call_in(int ms, F f) { 00445 void *p = equeue_alloc(&_equeue, sizeof(F)); 00446 if (!p) { 00447 return 0; 00448 } 00449 00450 F *e = new (p) F(f); 00451 equeue_event_delay(e, ms); 00452 equeue_event_dtor(e, &EventQueue::function_dtor<F>); 00453 return equeue_post(&_equeue, &EventQueue::function_call<F>, e); 00454 } 00455 00456 /** Calls an event on the queue after a specified delay 00457 * @see EventQueue::call_in 00458 * @param ms Time to delay in milliseconds 00459 * @param f Function to execute in the context of the dispatch loop 00460 * @param a0 Argument to pass to the callback 00461 */ 00462 template <typename F, typename A0> 00463 int call_in(int ms, F f, A0 a0) { 00464 return call_in(ms, context10<F, A0>(f, a0)); 00465 } 00466 00467 /** Calls an event on the queue after a specified delay 00468 * @see EventQueue::call_in 00469 * @param ms Time to delay in milliseconds 00470 * @param f Function to execute in the context of the dispatch loop 00471 * @param a0,a1 Arguments to pass to the callback 00472 */ 00473 template <typename F, typename A0, typename A1> 00474 int call_in(int ms, F f, A0 a0, A1 a1) { 00475 return call_in(ms, context20<F, A0, A1>(f, a0, a1)); 00476 } 00477 00478 /** Calls an event on the queue after a specified delay 00479 * @see EventQueue::call_in 00480 * @param ms Time to delay in milliseconds 00481 * @param f Function to execute in the context of the dispatch loop 00482 * @param a0,a1,a2 Arguments to pass to the callback 00483 */ 00484 template <typename F, typename A0, typename A1, typename A2> 00485 int call_in(int ms, F f, A0 a0, A1 a1, A2 a2) { 00486 return call_in(ms, context30<F, A0, A1, A2>(f, a0, a1, a2)); 00487 } 00488 00489 /** Calls an event on the queue after a specified delay 00490 * @see EventQueue::call_in 00491 * @param ms Time to delay in milliseconds 00492 * @param f Function to execute in the context of the dispatch loop 00493 * @param a0,a1,a2,a3 Arguments to pass to the callback 00494 */ 00495 template <typename F, typename A0, typename A1, typename A2, typename A3> 00496 int call_in(int ms, F f, A0 a0, A1 a1, A2 a2, A3 a3) { 00497 return call_in(ms, context40<F, A0, A1, A2, A3>(f, a0, a1, a2, a3)); 00498 } 00499 00500 /** Calls an event on the queue after a specified delay 00501 * @see EventQueue::call_in 00502 * @param ms Time to delay in milliseconds 00503 * @param f Function to execute in the context of the dispatch loop 00504 * @param a0,a1,a2,a3,a4 Arguments to pass to the callback 00505 */ 00506 template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> 00507 int call_in(int ms, F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00508 return call_in(ms, context50<F, A0, A1, A2, A3, A4>(f, a0, a1, a2, a3, a4)); 00509 } 00510 00511 /** Calls an event on the queue after a specified delay 00512 * @see EventQueue::call_in 00513 */ 00514 template <typename T, typename R> 00515 int call_in(int ms, T *obj, R (T::*method)()) { 00516 return call_in(ms, mbed::callback(obj, method)); 00517 } 00518 00519 /** Calls an event on the queue after a specified delay 00520 * @see EventQueue::call_in 00521 */ 00522 template <typename T, typename R> 00523 int call_in(int ms, const T *obj, R (T::*method)() const) { 00524 return call_in(ms, mbed::callback(obj, method)); 00525 } 00526 00527 /** Calls an event on the queue after a specified delay 00528 * @see EventQueue::call_in 00529 */ 00530 template <typename T, typename R> 00531 int call_in(int ms, volatile T *obj, R (T::*method)() volatile) { 00532 return call_in(ms, mbed::callback(obj, method)); 00533 } 00534 00535 /** Calls an event on the queue after a specified delay 00536 * @see EventQueue::call_in 00537 */ 00538 template <typename T, typename R> 00539 int call_in(int ms, const volatile T *obj, R (T::*method)() const volatile) { 00540 return call_in(ms, mbed::callback(obj, method)); 00541 } 00542 00543 /** Calls an event on the queue after a specified delay 00544 * @see EventQueue::call_in 00545 */ 00546 template <typename T, typename R, typename A0> 00547 int call_in(int ms, T *obj, R (T::*method)(A0), A0 a0) { 00548 return call_in(ms, mbed::callback(obj, method), a0); 00549 } 00550 00551 /** Calls an event on the queue after a specified delay 00552 * @see EventQueue::call_in 00553 */ 00554 template <typename T, typename R, typename A0> 00555 int call_in(int ms, const T *obj, R (T::*method)(A0) const, A0 a0) { 00556 return call_in(ms, mbed::callback(obj, method), a0); 00557 } 00558 00559 /** Calls an event on the queue after a specified delay 00560 * @see EventQueue::call_in 00561 */ 00562 template <typename T, typename R, typename A0> 00563 int call_in(int ms, volatile T *obj, R (T::*method)(A0) volatile, A0 a0) { 00564 return call_in(ms, mbed::callback(obj, method), a0); 00565 } 00566 00567 /** Calls an event on the queue after a specified delay 00568 * @see EventQueue::call_in 00569 */ 00570 template <typename T, typename R, typename A0> 00571 int call_in(int ms, const volatile T *obj, R (T::*method)(A0) const volatile, A0 a0) { 00572 return call_in(ms, mbed::callback(obj, method), a0); 00573 } 00574 00575 /** Calls an event on the queue after a specified delay 00576 * @see EventQueue::call_in 00577 */ 00578 template <typename T, typename R, typename A0, typename A1> 00579 int call_in(int ms, T *obj, R (T::*method)(A0, A1), A0 a0, A1 a1) { 00580 return call_in(ms, mbed::callback(obj, method), a0, a1); 00581 } 00582 00583 /** Calls an event on the queue after a specified delay 00584 * @see EventQueue::call_in 00585 */ 00586 template <typename T, typename R, typename A0, typename A1> 00587 int call_in(int ms, const T *obj, R (T::*method)(A0, A1) const, A0 a0, A1 a1) { 00588 return call_in(ms, mbed::callback(obj, method), a0, a1); 00589 } 00590 00591 /** Calls an event on the queue after a specified delay 00592 * @see EventQueue::call_in 00593 */ 00594 template <typename T, typename R, typename A0, typename A1> 00595 int call_in(int ms, volatile T *obj, R (T::*method)(A0, A1) volatile, A0 a0, A1 a1) { 00596 return call_in(ms, mbed::callback(obj, method), a0, a1); 00597 } 00598 00599 /** Calls an event on the queue after a specified delay 00600 * @see EventQueue::call_in 00601 */ 00602 template <typename T, typename R, typename A0, typename A1> 00603 int call_in(int ms, const volatile T *obj, R (T::*method)(A0, A1) const volatile, A0 a0, A1 a1) { 00604 return call_in(ms, mbed::callback(obj, method), a0, a1); 00605 } 00606 00607 /** Calls an event on the queue after a specified delay 00608 * @see EventQueue::call_in 00609 */ 00610 template <typename T, typename R, typename A0, typename A1, typename A2> 00611 int call_in(int ms, T *obj, R (T::*method)(A0, A1, A2), A0 a0, A1 a1, A2 a2) { 00612 return call_in(ms, mbed::callback(obj, method), a0, a1, a2); 00613 } 00614 00615 /** Calls an event on the queue after a specified delay 00616 * @see EventQueue::call_in 00617 */ 00618 template <typename T, typename R, typename A0, typename A1, typename A2> 00619 int call_in(int ms, const T *obj, R (T::*method)(A0, A1, A2) const, A0 a0, A1 a1, A2 a2) { 00620 return call_in(ms, mbed::callback(obj, method), a0, a1, a2); 00621 } 00622 00623 /** Calls an event on the queue after a specified delay 00624 * @see EventQueue::call_in 00625 */ 00626 template <typename T, typename R, typename A0, typename A1, typename A2> 00627 int call_in(int ms, volatile T *obj, R (T::*method)(A0, A1, A2) volatile, A0 a0, A1 a1, A2 a2) { 00628 return call_in(ms, mbed::callback(obj, method), a0, a1, a2); 00629 } 00630 00631 /** Calls an event on the queue after a specified delay 00632 * @see EventQueue::call_in 00633 */ 00634 template <typename T, typename R, typename A0, typename A1, typename A2> 00635 int call_in(int ms, const volatile T *obj, R (T::*method)(A0, A1, A2) const volatile, A0 a0, A1 a1, A2 a2) { 00636 return call_in(ms, mbed::callback(obj, method), a0, a1, a2); 00637 } 00638 00639 /** Calls an event on the queue after a specified delay 00640 * @see EventQueue::call_in 00641 */ 00642 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00643 int call_in(int ms, T *obj, R (T::*method)(A0, A1, A2, A3), A0 a0, A1 a1, A2 a2, A3 a3) { 00644 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00645 } 00646 00647 /** Calls an event on the queue after a specified delay 00648 * @see EventQueue::call_in 00649 */ 00650 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00651 int call_in(int ms, const T *obj, R (T::*method)(A0, A1, A2, A3) const, A0 a0, A1 a1, A2 a2, A3 a3) { 00652 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00653 } 00654 00655 /** Calls an event on the queue after a specified delay 00656 * @see EventQueue::call_in 00657 */ 00658 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00659 int call_in(int ms, volatile T *obj, R (T::*method)(A0, A1, A2, A3) volatile, A0 a0, A1 a1, A2 a2, A3 a3) { 00660 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00661 } 00662 00663 /** Calls an event on the queue after a specified delay 00664 * @see EventQueue::call_in 00665 */ 00666 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00667 int call_in(int ms, const volatile T *obj, R (T::*method)(A0, A1, A2, A3) const volatile, A0 a0, A1 a1, A2 a2, A3 a3) { 00668 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00669 } 00670 00671 /** Calls an event on the queue after a specified delay 00672 * @see EventQueue::call_in 00673 */ 00674 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00675 int call_in(int ms, T *obj, R (T::*method)(A0, A1, A2, A3, A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00676 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00677 } 00678 00679 /** Calls an event on the queue after a specified delay 00680 * @see EventQueue::call_in 00681 */ 00682 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00683 int call_in(int ms, const T *obj, R (T::*method)(A0, A1, A2, A3, A4) const, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00684 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00685 } 00686 00687 /** Calls an event on the queue after a specified delay 00688 * @see EventQueue::call_in 00689 */ 00690 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00691 int call_in(int ms, volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00692 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00693 } 00694 00695 /** Calls an event on the queue after a specified delay 00696 * @see EventQueue::call_in 00697 */ 00698 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00699 int call_in(int ms, const volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00700 return call_in(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00701 } 00702 00703 /** Calls an event on the queue periodically 00704 * 00705 * @note The first call_every event occurs after the specified delay. 00706 * To create a periodic event that fires immediately, @see Event. 00707 * 00708 * The specified callback will be executed in the context of the event 00709 * queue's dispatch loop. 00710 * 00711 * The call_every function is irq safe and can act as a mechanism for 00712 * moving events out of irq contexts. 00713 * 00714 * @param f Function to execute in the context of the dispatch loop 00715 * @param ms Period of the event in milliseconds 00716 * @return A unique id that represents the posted event and can 00717 * be passed to cancel, or an id of 0 if there is not 00718 * enough memory to allocate the event. 00719 */ 00720 template <typename F> 00721 int call_every(int ms, F f) { 00722 void *p = equeue_alloc(&_equeue, sizeof(F)); 00723 if (!p) { 00724 return 0; 00725 } 00726 00727 F *e = new (p) F(f); 00728 equeue_event_delay(e, ms); 00729 equeue_event_period(e, ms); 00730 equeue_event_dtor(e, &EventQueue::function_dtor<F>); 00731 return equeue_post(&_equeue, &EventQueue::function_call<F>, e); 00732 } 00733 00734 /** Calls an event on the queue periodically 00735 * @see EventQueue::call_every 00736 * @param f Function to execute in the context of the dispatch loop 00737 * @param a0 Argument to pass to the callback 00738 * @param ms Period of the event in milliseconds 00739 */ 00740 template <typename F, typename A0> 00741 int call_every(int ms, F f, A0 a0) { 00742 return call_every(ms, context10<F, A0>(f, a0)); 00743 } 00744 00745 /** Calls an event on the queue periodically 00746 * @see EventQueue::call_every 00747 * @param f Function to execute in the context of the dispatch loop 00748 * @param a0,a1 Arguments to pass to the callback 00749 * @param ms Period of the event in milliseconds 00750 */ 00751 template <typename F, typename A0, typename A1> 00752 int call_every(int ms, F f, A0 a0, A1 a1) { 00753 return call_every(ms, context20<F, A0, A1>(f, a0, a1)); 00754 } 00755 00756 /** Calls an event on the queue periodically 00757 * @see EventQueue::call_every 00758 * @param f Function to execute in the context of the dispatch loop 00759 * @param a0,a1,a2 Arguments to pass to the callback 00760 * @param ms Period of the event in milliseconds 00761 */ 00762 template <typename F, typename A0, typename A1, typename A2> 00763 int call_every(int ms, F f, A0 a0, A1 a1, A2 a2) { 00764 return call_every(ms, context30<F, A0, A1, A2>(f, a0, a1, a2)); 00765 } 00766 00767 /** Calls an event on the queue periodically 00768 * @see EventQueue::call_every 00769 * @param f Function to execute in the context of the dispatch loop 00770 * @param a0,a1,a2,a3 Arguments to pass to the callback 00771 * @param ms Period of the event in milliseconds 00772 */ 00773 template <typename F, typename A0, typename A1, typename A2, typename A3> 00774 int call_every(int ms, F f, A0 a0, A1 a1, A2 a2, A3 a3) { 00775 return call_every(ms, context40<F, A0, A1, A2, A3>(f, a0, a1, a2, a3)); 00776 } 00777 00778 /** Calls an event on the queue periodically 00779 * @see EventQueue::call_every 00780 * @param f Function to execute in the context of the dispatch loop 00781 * @param a0,a1,a2,a3,a4 Arguments to pass to the callback 00782 * @param ms Period of the event in milliseconds 00783 */ 00784 template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> 00785 int call_every(int ms, F f, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00786 return call_every(ms, context50<F, A0, A1, A2, A3, A4>(f, a0, a1, a2, a3, a4)); 00787 } 00788 00789 /** Calls an event on the queue periodically 00790 * @see EventQueue::call_every 00791 */ 00792 template <typename T, typename R> 00793 int call_every(int ms, T *obj, R (T::*method)()) { 00794 return call_every(ms, mbed::callback(obj, method)); 00795 } 00796 00797 /** Calls an event on the queue periodically 00798 * @see EventQueue::call_every 00799 */ 00800 template <typename T, typename R> 00801 int call_every(int ms, const T *obj, R (T::*method)() const) { 00802 return call_every(ms, mbed::callback(obj, method)); 00803 } 00804 00805 /** Calls an event on the queue periodically 00806 * @see EventQueue::call_every 00807 */ 00808 template <typename T, typename R> 00809 int call_every(int ms, volatile T *obj, R (T::*method)() volatile) { 00810 return call_every(ms, mbed::callback(obj, method)); 00811 } 00812 00813 /** Calls an event on the queue periodically 00814 * @see EventQueue::call_every 00815 */ 00816 template <typename T, typename R> 00817 int call_every(int ms, const volatile T *obj, R (T::*method)() const volatile) { 00818 return call_every(ms, mbed::callback(obj, method)); 00819 } 00820 00821 /** Calls an event on the queue periodically 00822 * @see EventQueue::call_every 00823 */ 00824 template <typename T, typename R, typename A0> 00825 int call_every(int ms, T *obj, R (T::*method)(A0), A0 a0) { 00826 return call_every(ms, mbed::callback(obj, method), a0); 00827 } 00828 00829 /** Calls an event on the queue periodically 00830 * @see EventQueue::call_every 00831 */ 00832 template <typename T, typename R, typename A0> 00833 int call_every(int ms, const T *obj, R (T::*method)(A0) const, A0 a0) { 00834 return call_every(ms, mbed::callback(obj, method), a0); 00835 } 00836 00837 /** Calls an event on the queue periodically 00838 * @see EventQueue::call_every 00839 */ 00840 template <typename T, typename R, typename A0> 00841 int call_every(int ms, volatile T *obj, R (T::*method)(A0) volatile, A0 a0) { 00842 return call_every(ms, mbed::callback(obj, method), a0); 00843 } 00844 00845 /** Calls an event on the queue periodically 00846 * @see EventQueue::call_every 00847 */ 00848 template <typename T, typename R, typename A0> 00849 int call_every(int ms, const volatile T *obj, R (T::*method)(A0) const volatile, A0 a0) { 00850 return call_every(ms, mbed::callback(obj, method), a0); 00851 } 00852 00853 /** Calls an event on the queue periodically 00854 * @see EventQueue::call_every 00855 */ 00856 template <typename T, typename R, typename A0, typename A1> 00857 int call_every(int ms, T *obj, R (T::*method)(A0, A1), A0 a0, A1 a1) { 00858 return call_every(ms, mbed::callback(obj, method), a0, a1); 00859 } 00860 00861 /** Calls an event on the queue periodically 00862 * @see EventQueue::call_every 00863 */ 00864 template <typename T, typename R, typename A0, typename A1> 00865 int call_every(int ms, const T *obj, R (T::*method)(A0, A1) const, A0 a0, A1 a1) { 00866 return call_every(ms, mbed::callback(obj, method), a0, a1); 00867 } 00868 00869 /** Calls an event on the queue periodically 00870 * @see EventQueue::call_every 00871 */ 00872 template <typename T, typename R, typename A0, typename A1> 00873 int call_every(int ms, volatile T *obj, R (T::*method)(A0, A1) volatile, A0 a0, A1 a1) { 00874 return call_every(ms, mbed::callback(obj, method), a0, a1); 00875 } 00876 00877 /** Calls an event on the queue periodically 00878 * @see EventQueue::call_every 00879 */ 00880 template <typename T, typename R, typename A0, typename A1> 00881 int call_every(int ms, const volatile T *obj, R (T::*method)(A0, A1) const volatile, A0 a0, A1 a1) { 00882 return call_every(ms, mbed::callback(obj, method), a0, a1); 00883 } 00884 00885 /** Calls an event on the queue periodically 00886 * @see EventQueue::call_every 00887 */ 00888 template <typename T, typename R, typename A0, typename A1, typename A2> 00889 int call_every(int ms, T *obj, R (T::*method)(A0, A1, A2), A0 a0, A1 a1, A2 a2) { 00890 return call_every(ms, mbed::callback(obj, method), a0, a1, a2); 00891 } 00892 00893 /** Calls an event on the queue periodically 00894 * @see EventQueue::call_every 00895 */ 00896 template <typename T, typename R, typename A0, typename A1, typename A2> 00897 int call_every(int ms, const T *obj, R (T::*method)(A0, A1, A2) const, A0 a0, A1 a1, A2 a2) { 00898 return call_every(ms, mbed::callback(obj, method), a0, a1, a2); 00899 } 00900 00901 /** Calls an event on the queue periodically 00902 * @see EventQueue::call_every 00903 */ 00904 template <typename T, typename R, typename A0, typename A1, typename A2> 00905 int call_every(int ms, volatile T *obj, R (T::*method)(A0, A1, A2) volatile, A0 a0, A1 a1, A2 a2) { 00906 return call_every(ms, mbed::callback(obj, method), a0, a1, a2); 00907 } 00908 00909 /** Calls an event on the queue periodically 00910 * @see EventQueue::call_every 00911 */ 00912 template <typename T, typename R, typename A0, typename A1, typename A2> 00913 int call_every(int ms, const volatile T *obj, R (T::*method)(A0, A1, A2) const volatile, A0 a0, A1 a1, A2 a2) { 00914 return call_every(ms, mbed::callback(obj, method), a0, a1, a2); 00915 } 00916 00917 /** Calls an event on the queue periodically 00918 * @see EventQueue::call_every 00919 */ 00920 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00921 int call_every(int ms, T *obj, R (T::*method)(A0, A1, A2, A3), A0 a0, A1 a1, A2 a2, A3 a3) { 00922 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00923 } 00924 00925 /** Calls an event on the queue periodically 00926 * @see EventQueue::call_every 00927 */ 00928 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00929 int call_every(int ms, const T *obj, R (T::*method)(A0, A1, A2, A3) const, A0 a0, A1 a1, A2 a2, A3 a3) { 00930 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00931 } 00932 00933 /** Calls an event on the queue periodically 00934 * @see EventQueue::call_every 00935 */ 00936 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00937 int call_every(int ms, volatile T *obj, R (T::*method)(A0, A1, A2, A3) volatile, A0 a0, A1 a1, A2 a2, A3 a3) { 00938 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00939 } 00940 00941 /** Calls an event on the queue periodically 00942 * @see EventQueue::call_every 00943 */ 00944 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 00945 int call_every(int ms, const volatile T *obj, R (T::*method)(A0, A1, A2, A3) const volatile, A0 a0, A1 a1, A2 a2, A3 a3) { 00946 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3); 00947 } 00948 00949 /** Calls an event on the queue periodically 00950 * @see EventQueue::call_every 00951 */ 00952 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00953 int call_every(int ms, T *obj, R (T::*method)(A0, A1, A2, A3, A4), A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00954 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00955 } 00956 00957 /** Calls an event on the queue periodically 00958 * @see EventQueue::call_every 00959 */ 00960 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00961 int call_every(int ms, const T *obj, R (T::*method)(A0, A1, A2, A3, A4) const, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00962 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00963 } 00964 00965 /** Calls an event on the queue periodically 00966 * @see EventQueue::call_every 00967 */ 00968 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00969 int call_every(int ms, volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00970 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00971 } 00972 00973 /** Calls an event on the queue periodically 00974 * @see EventQueue::call_every 00975 */ 00976 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 00977 int call_every(int ms, const volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 00978 return call_every(ms, mbed::callback(obj, method), a0, a1, a2, a3, a4); 00979 } 00980 00981 /** Creates an event bound to the event queue 00982 * 00983 * Constructs an event bound to the specified event queue. The specified 00984 * callback acts as the target for the event and is executed in the 00985 * context of the event queue's dispatch loop once posted. 00986 * 00987 * @param func Function to execute when the event is dispatched 00988 * @return Event that will dispatch on the specific queue 00989 */ 00990 template <typename R> 00991 Event<void()> event(R (*func)()); 00992 00993 /** Creates an event bound to the event queue 00994 * @see EventQueue::event 00995 */ 00996 template <typename T, typename R> 00997 Event<void()> event(T *obj, R (T::*method)()); 00998 00999 /** Creates an event bound to the event queue 01000 * @see EventQueue::event 01001 */ 01002 template <typename T, typename R> 01003 Event<void()> event(const T *obj, R (T::*method)() const); 01004 01005 /** Creates an event bound to the event queue 01006 * @see EventQueue::event 01007 */ 01008 template <typename T, typename R> 01009 Event<void()> event(volatile T *obj, R (T::*method)() volatile); 01010 01011 /** Creates an event bound to the event queue 01012 * @see EventQueue::event 01013 */ 01014 template <typename T, typename R> 01015 Event<void()> event(const volatile T *obj, R (T::*method)() const volatile); 01016 01017 /** Creates an event bound to the event queue 01018 * @see EventQueue::event 01019 */ 01020 template <typename R> 01021 Event<void()> event(mbed::Callback<R()> cb); 01022 01023 /** Creates an event bound to the event queue 01024 * @see EventQueue::event 01025 */ 01026 template <typename R, typename B0, typename C0> 01027 Event<void()> event(R (*func)(B0), C0 c0); 01028 01029 /** Creates an event bound to the event queue 01030 * @see EventQueue::event 01031 */ 01032 template <typename T, typename R, typename B0, typename C0> 01033 Event<void()> event(T *obj, R (T::*method)(B0), C0 c0); 01034 01035 /** Creates an event bound to the event queue 01036 * @see EventQueue::event 01037 */ 01038 template <typename T, typename R, typename B0, typename C0> 01039 Event<void()> event(const T *obj, R (T::*method)(B0) const, C0 c0); 01040 01041 /** Creates an event bound to the event queue 01042 * @see EventQueue::event 01043 */ 01044 template <typename T, typename R, typename B0, typename C0> 01045 Event<void()> event(volatile T *obj, R (T::*method)(B0) volatile, C0 c0); 01046 01047 /** Creates an event bound to the event queue 01048 * @see EventQueue::event 01049 */ 01050 template <typename T, typename R, typename B0, typename C0> 01051 Event<void()> event(const volatile T *obj, R (T::*method)(B0) const volatile, C0 c0); 01052 01053 /** Creates an event bound to the event queue 01054 * @see EventQueue::event 01055 */ 01056 template <typename R, typename B0, typename C0> 01057 Event<void()> event(mbed::Callback<R(B0)> cb, C0 c0); 01058 01059 /** Creates an event bound to the event queue 01060 * @see EventQueue::event 01061 */ 01062 template <typename R, typename B0, typename B1, typename C0, typename C1> 01063 Event<void()> event(R (*func)(B0, B1), C0 c0, C1 c1); 01064 01065 /** Creates an event bound to the event queue 01066 * @see EventQueue::event 01067 */ 01068 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> 01069 Event<void()> event(T *obj, R (T::*method)(B0, B1), C0 c0, C1 c1); 01070 01071 /** Creates an event bound to the event queue 01072 * @see EventQueue::event 01073 */ 01074 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> 01075 Event<void()> event(const T *obj, R (T::*method)(B0, B1) const, C0 c0, C1 c1); 01076 01077 /** Creates an event bound to the event queue 01078 * @see EventQueue::event 01079 */ 01080 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> 01081 Event<void()> event(volatile T *obj, R (T::*method)(B0, B1) volatile, C0 c0, C1 c1); 01082 01083 /** Creates an event bound to the event queue 01084 * @see EventQueue::event 01085 */ 01086 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1> 01087 Event<void()> event(const volatile T *obj, R (T::*method)(B0, B1) const volatile, C0 c0, C1 c1); 01088 01089 /** Creates an event bound to the event queue 01090 * @see EventQueue::event 01091 */ 01092 template <typename R, typename B0, typename B1, typename C0, typename C1> 01093 Event<void()> event(mbed::Callback<R(B0, B1)> cb, C0 c0, C1 c1); 01094 01095 /** Creates an event bound to the event queue 01096 * @see EventQueue::event 01097 */ 01098 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> 01099 Event<void()> event(R (*func)(B0, B1, B2), C0 c0, C1 c1, C2 c2); 01100 01101 /** Creates an event bound to the event queue 01102 * @see EventQueue::event 01103 */ 01104 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> 01105 Event<void()> event(T *obj, R (T::*method)(B0, B1, B2), C0 c0, C1 c1, C2 c2); 01106 01107 /** Creates an event bound to the event queue 01108 * @see EventQueue::event 01109 */ 01110 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> 01111 Event<void()> event(const T *obj, R (T::*method)(B0, B1, B2) const, C0 c0, C1 c1, C2 c2); 01112 01113 /** Creates an event bound to the event queue 01114 * @see EventQueue::event 01115 */ 01116 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> 01117 Event<void()> event(volatile T *obj, R (T::*method)(B0, B1, B2) volatile, C0 c0, C1 c1, C2 c2); 01118 01119 /** Creates an event bound to the event queue 01120 * @see EventQueue::event 01121 */ 01122 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> 01123 Event<void()> event(const volatile T *obj, R (T::*method)(B0, B1, B2) const volatile, C0 c0, C1 c1, C2 c2); 01124 01125 /** Creates an event bound to the event queue 01126 * @see EventQueue::event 01127 */ 01128 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2> 01129 Event<void()> event(mbed::Callback<R(B0, B1, B2)> cb, C0 c0, C1 c1, C2 c2); 01130 01131 /** Creates an event bound to the event queue 01132 * @see EventQueue::event 01133 */ 01134 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> 01135 Event<void()> event(R (*func)(B0, B1, B2, B3), C0 c0, C1 c1, C2 c2, C3 c3); 01136 01137 /** Creates an event bound to the event queue 01138 * @see EventQueue::event 01139 */ 01140 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> 01141 Event<void()> event(T *obj, R (T::*method)(B0, B1, B2, B3), C0 c0, C1 c1, C2 c2, C3 c3); 01142 01143 /** Creates an event bound to the event queue 01144 * @see EventQueue::event 01145 */ 01146 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> 01147 Event<void()> event(const T *obj, R (T::*method)(B0, B1, B2, B3) const, C0 c0, C1 c1, C2 c2, C3 c3); 01148 01149 /** Creates an event bound to the event queue 01150 * @see EventQueue::event 01151 */ 01152 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> 01153 Event<void()> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3) volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01154 01155 /** Creates an event bound to the event queue 01156 * @see EventQueue::event 01157 */ 01158 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> 01159 Event<void()> event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3) const volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01160 01161 /** Creates an event bound to the event queue 01162 * @see EventQueue::event 01163 */ 01164 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3> 01165 Event<void()> event(mbed::Callback<R(B0, B1, B2, B3)> cb, C0 c0, C1 c1, C2 c2, C3 c3); 01166 01167 /** Creates an event bound to the event queue 01168 * @see EventQueue::event 01169 */ 01170 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> 01171 Event<void()> event(R (*func)(B0, B1, B2, B3, B4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01172 01173 /** Creates an event bound to the event queue 01174 * @see EventQueue::event 01175 */ 01176 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> 01177 Event<void()> event(T *obj, R (T::*method)(B0, B1, B2, B3, B4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01178 01179 /** Creates an event bound to the event queue 01180 * @see EventQueue::event 01181 */ 01182 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> 01183 Event<void()> event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01184 01185 /** Creates an event bound to the event queue 01186 * @see EventQueue::event 01187 */ 01188 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> 01189 Event<void()> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01190 01191 /** Creates an event bound to the event queue 01192 * @see EventQueue::event 01193 */ 01194 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> 01195 Event<void()> 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); 01196 01197 /** Creates an event bound to the event queue 01198 * @see EventQueue::event 01199 */ 01200 template <typename R, typename B0, typename B1, typename B2, typename B3, typename B4, typename C0, typename C1, typename C2, typename C3, typename C4> 01201 Event<void()> event(mbed::Callback<R(B0, B1, B2, B3, B4)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01202 01203 /** Creates an event bound to the event queue 01204 * @see EventQueue::event 01205 */ 01206 template <typename R, typename A0> 01207 Event<void(A0)> event(R (*func)(A0)); 01208 01209 /** Creates an event bound to the event queue 01210 * @see EventQueue::event 01211 */ 01212 template <typename T, typename R, typename A0> 01213 Event<void(A0)> event(T *obj, R (T::*method)(A0)); 01214 01215 /** Creates an event bound to the event queue 01216 * @see EventQueue::event 01217 */ 01218 template <typename T, typename R, typename A0> 01219 Event<void(A0)> event(const T *obj, R (T::*method)(A0) const); 01220 01221 /** Creates an event bound to the event queue 01222 * @see EventQueue::event 01223 */ 01224 template <typename T, typename R, typename A0> 01225 Event<void(A0)> event(volatile T *obj, R (T::*method)(A0) volatile); 01226 01227 /** Creates an event bound to the event queue 01228 * @see EventQueue::event 01229 */ 01230 template <typename T, typename R, typename A0> 01231 Event<void(A0)> event(const volatile T *obj, R (T::*method)(A0) const volatile); 01232 01233 /** Creates an event bound to the event queue 01234 * @see EventQueue::event 01235 */ 01236 template <typename R, typename A0> 01237 Event<void(A0)> event(mbed::Callback<R(A0)> cb); 01238 01239 /** Creates an event bound to the event queue 01240 * @see EventQueue::event 01241 */ 01242 template <typename R, typename B0, typename C0, typename A0> 01243 Event<void(A0)> event(R (*func)(B0, A0), C0 c0); 01244 01245 /** Creates an event bound to the event queue 01246 * @see EventQueue::event 01247 */ 01248 template <typename T, typename R, typename B0, typename C0, typename A0> 01249 Event<void(A0)> event(T *obj, R (T::*method)(B0, A0), C0 c0); 01250 01251 /** Creates an event bound to the event queue 01252 * @see EventQueue::event 01253 */ 01254 template <typename T, typename R, typename B0, typename C0, typename A0> 01255 Event<void(A0)> event(const T *obj, R (T::*method)(B0, A0) const, C0 c0); 01256 01257 /** Creates an event bound to the event queue 01258 * @see EventQueue::event 01259 */ 01260 template <typename T, typename R, typename B0, typename C0, typename A0> 01261 Event<void(A0)> event(volatile T *obj, R (T::*method)(B0, A0) volatile, C0 c0); 01262 01263 /** Creates an event bound to the event queue 01264 * @see EventQueue::event 01265 */ 01266 template <typename T, typename R, typename B0, typename C0, typename A0> 01267 Event<void(A0)> event(const volatile T *obj, R (T::*method)(B0, A0) const volatile, C0 c0); 01268 01269 /** Creates an event bound to the event queue 01270 * @see EventQueue::event 01271 */ 01272 template <typename R, typename B0, typename C0, typename A0> 01273 Event<void(A0)> event(mbed::Callback<R(B0, A0)> cb, C0 c0); 01274 01275 /** Creates an event bound to the event queue 01276 * @see EventQueue::event 01277 */ 01278 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0> 01279 Event<void(A0)> event(R (*func)(B0, B1, A0), C0 c0, C1 c1); 01280 01281 /** Creates an event bound to the event queue 01282 * @see EventQueue::event 01283 */ 01284 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> 01285 Event<void(A0)> event(T *obj, R (T::*method)(B0, B1, A0), C0 c0, C1 c1); 01286 01287 /** Creates an event bound to the event queue 01288 * @see EventQueue::event 01289 */ 01290 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> 01291 Event<void(A0)> event(const T *obj, R (T::*method)(B0, B1, A0) const, C0 c0, C1 c1); 01292 01293 /** Creates an event bound to the event queue 01294 * @see EventQueue::event 01295 */ 01296 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> 01297 Event<void(A0)> event(volatile T *obj, R (T::*method)(B0, B1, A0) volatile, C0 c0, C1 c1); 01298 01299 /** Creates an event bound to the event queue 01300 * @see EventQueue::event 01301 */ 01302 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0> 01303 Event<void(A0)> event(const volatile T *obj, R (T::*method)(B0, B1, A0) const volatile, C0 c0, C1 c1); 01304 01305 /** Creates an event bound to the event queue 01306 * @see EventQueue::event 01307 */ 01308 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0> 01309 Event<void(A0)> event(mbed::Callback<R(B0, B1, A0)> cb, C0 c0, C1 c1); 01310 01311 /** Creates an event bound to the event queue 01312 * @see EventQueue::event 01313 */ 01314 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> 01315 Event<void(A0)> event(R (*func)(B0, B1, B2, A0), C0 c0, C1 c1, C2 c2); 01316 01317 /** Creates an event bound to the event queue 01318 * @see EventQueue::event 01319 */ 01320 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> 01321 Event<void(A0)> event(T *obj, R (T::*method)(B0, B1, B2, A0), C0 c0, C1 c1, C2 c2); 01322 01323 /** Creates an event bound to the event queue 01324 * @see EventQueue::event 01325 */ 01326 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> 01327 Event<void(A0)> event(const T *obj, R (T::*method)(B0, B1, B2, A0) const, C0 c0, C1 c1, C2 c2); 01328 01329 /** Creates an event bound to the event queue 01330 * @see EventQueue::event 01331 */ 01332 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> 01333 Event<void(A0)> event(volatile T *obj, R (T::*method)(B0, B1, B2, A0) volatile, C0 c0, C1 c1, C2 c2); 01334 01335 /** Creates an event bound to the event queue 01336 * @see EventQueue::event 01337 */ 01338 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> 01339 Event<void(A0)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0) const volatile, C0 c0, C1 c1, C2 c2); 01340 01341 /** Creates an event bound to the event queue 01342 * @see EventQueue::event 01343 */ 01344 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0> 01345 Event<void(A0)> event(mbed::Callback<R(B0, B1, B2, A0)> cb, C0 c0, C1 c1, C2 c2); 01346 01347 /** Creates an event bound to the event queue 01348 * @see EventQueue::event 01349 */ 01350 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> 01351 Event<void(A0)> event(R (*func)(B0, B1, B2, B3, A0), C0 c0, C1 c1, C2 c2, C3 c3); 01352 01353 /** Creates an event bound to the event queue 01354 * @see EventQueue::event 01355 */ 01356 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> 01357 Event<void(A0)> event(T *obj, R (T::*method)(B0, B1, B2, B3, A0), C0 c0, C1 c1, C2 c2, C3 c3); 01358 01359 /** Creates an event bound to the event queue 01360 * @see EventQueue::event 01361 */ 01362 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> 01363 Event<void(A0)> event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0) const, C0 c0, C1 c1, C2 c2, C3 c3); 01364 01365 /** Creates an event bound to the event queue 01366 * @see EventQueue::event 01367 */ 01368 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> 01369 Event<void(A0)> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01370 01371 /** Creates an event bound to the event queue 01372 * @see EventQueue::event 01373 */ 01374 template <typename T, typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> 01375 Event<void(A0)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0) const volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01376 01377 /** Creates an event bound to the event queue 01378 * @see EventQueue::event 01379 */ 01380 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0> 01381 Event<void(A0)> event(mbed::Callback<R(B0, B1, B2, B3, A0)> cb, C0 c0, C1 c1, C2 c2, C3 c3); 01382 01383 /** Creates an event bound to the event queue 01384 * @see EventQueue::event 01385 */ 01386 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> 01387 Event<void(A0)> event(R (*func)(B0, B1, B2, B3, B4, A0), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01388 01389 /** Creates an event bound to the event queue 01390 * @see EventQueue::event 01391 */ 01392 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> 01393 Event<void(A0)> event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01394 01395 /** Creates an event bound to the event queue 01396 * @see EventQueue::event 01397 */ 01398 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> 01399 Event<void(A0)> event(const T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) const, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01400 01401 /** Creates an event bound to the event queue 01402 * @see EventQueue::event 01403 */ 01404 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> 01405 Event<void(A0)> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0) volatile, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01406 01407 /** Creates an event bound to the event queue 01408 * @see EventQueue::event 01409 */ 01410 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> 01411 Event<void(A0)> 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); 01412 01413 /** Creates an event bound to the event queue 01414 * @see EventQueue::event 01415 */ 01416 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> 01417 Event<void(A0)> event(mbed::Callback<R(B0, B1, B2, B3, B4, A0)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01418 01419 /** Creates an event bound to the event queue 01420 * @see EventQueue::event 01421 */ 01422 template <typename R, typename A0, typename A1> 01423 Event<void(A0, A1)> event(R (*func)(A0, A1)); 01424 01425 /** Creates an event bound to the event queue 01426 * @see EventQueue::event 01427 */ 01428 template <typename T, typename R, typename A0, typename A1> 01429 Event<void(A0, A1)> event(T *obj, R (T::*method)(A0, A1)); 01430 01431 /** Creates an event bound to the event queue 01432 * @see EventQueue::event 01433 */ 01434 template <typename T, typename R, typename A0, typename A1> 01435 Event<void(A0, A1)> event(const T *obj, R (T::*method)(A0, A1) const); 01436 01437 /** Creates an event bound to the event queue 01438 * @see EventQueue::event 01439 */ 01440 template <typename T, typename R, typename A0, typename A1> 01441 Event<void(A0, A1)> event(volatile T *obj, R (T::*method)(A0, A1) volatile); 01442 01443 /** Creates an event bound to the event queue 01444 * @see EventQueue::event 01445 */ 01446 template <typename T, typename R, typename A0, typename A1> 01447 Event<void(A0, A1)> event(const volatile T *obj, R (T::*method)(A0, A1) const volatile); 01448 01449 /** Creates an event bound to the event queue 01450 * @see EventQueue::event 01451 */ 01452 template <typename R, typename A0, typename A1> 01453 Event<void(A0, A1)> event(mbed::Callback<R(A0, A1)> cb); 01454 01455 /** Creates an event bound to the event queue 01456 * @see EventQueue::event 01457 */ 01458 template <typename R, typename B0, typename C0, typename A0, typename A1> 01459 Event<void(A0, A1)> event(R (*func)(B0, A0, A1), C0 c0); 01460 01461 /** Creates an event bound to the event queue 01462 * @see EventQueue::event 01463 */ 01464 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> 01465 Event<void(A0, A1)> event(T *obj, R (T::*method)(B0, A0, A1), C0 c0); 01466 01467 /** Creates an event bound to the event queue 01468 * @see EventQueue::event 01469 */ 01470 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> 01471 Event<void(A0, A1)> event(const T *obj, R (T::*method)(B0, A0, A1) const, C0 c0); 01472 01473 /** Creates an event bound to the event queue 01474 * @see EventQueue::event 01475 */ 01476 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> 01477 Event<void(A0, A1)> event(volatile T *obj, R (T::*method)(B0, A0, A1) volatile, C0 c0); 01478 01479 /** Creates an event bound to the event queue 01480 * @see EventQueue::event 01481 */ 01482 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1> 01483 Event<void(A0, A1)> event(const volatile T *obj, R (T::*method)(B0, A0, A1) const volatile, C0 c0); 01484 01485 /** Creates an event bound to the event queue 01486 * @see EventQueue::event 01487 */ 01488 template <typename R, typename B0, typename C0, typename A0, typename A1> 01489 Event<void(A0, A1)> event(mbed::Callback<R(B0, A0, A1)> cb, C0 c0); 01490 01491 /** Creates an event bound to the event queue 01492 * @see EventQueue::event 01493 */ 01494 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> 01495 Event<void(A0, A1)> event(R (*func)(B0, B1, A0, A1), C0 c0, C1 c1); 01496 01497 /** Creates an event bound to the event queue 01498 * @see EventQueue::event 01499 */ 01500 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> 01501 Event<void(A0, A1)> event(T *obj, R (T::*method)(B0, B1, A0, A1), C0 c0, C1 c1); 01502 01503 /** Creates an event bound to the event queue 01504 * @see EventQueue::event 01505 */ 01506 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> 01507 Event<void(A0, A1)> event(const T *obj, R (T::*method)(B0, B1, A0, A1) const, C0 c0, C1 c1); 01508 01509 /** Creates an event bound to the event queue 01510 * @see EventQueue::event 01511 */ 01512 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> 01513 Event<void(A0, A1)> event(volatile T *obj, R (T::*method)(B0, B1, A0, A1) volatile, C0 c0, C1 c1); 01514 01515 /** Creates an event bound to the event queue 01516 * @see EventQueue::event 01517 */ 01518 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> 01519 Event<void(A0, A1)> event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1) const volatile, C0 c0, C1 c1); 01520 01521 /** Creates an event bound to the event queue 01522 * @see EventQueue::event 01523 */ 01524 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1> 01525 Event<void(A0, A1)> event(mbed::Callback<R(B0, B1, A0, A1)> cb, C0 c0, C1 c1); 01526 01527 /** Creates an event bound to the event queue 01528 * @see EventQueue::event 01529 */ 01530 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> 01531 Event<void(A0, A1)> event(R (*func)(B0, B1, B2, A0, A1), C0 c0, C1 c1, C2 c2); 01532 01533 /** Creates an event bound to the event queue 01534 * @see EventQueue::event 01535 */ 01536 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> 01537 Event<void(A0, A1)> event(T *obj, R (T::*method)(B0, B1, B2, A0, A1), C0 c0, C1 c1, C2 c2); 01538 01539 /** Creates an event bound to the event queue 01540 * @see EventQueue::event 01541 */ 01542 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> 01543 Event<void(A0, A1)> event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1) const, C0 c0, C1 c1, C2 c2); 01544 01545 /** Creates an event bound to the event queue 01546 * @see EventQueue::event 01547 */ 01548 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> 01549 Event<void(A0, A1)> event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) volatile, C0 c0, C1 c1, C2 c2); 01550 01551 /** Creates an event bound to the event queue 01552 * @see EventQueue::event 01553 */ 01554 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> 01555 Event<void(A0, A1)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1) const volatile, C0 c0, C1 c1, C2 c2); 01556 01557 /** Creates an event bound to the event queue 01558 * @see EventQueue::event 01559 */ 01560 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1> 01561 Event<void(A0, A1)> event(mbed::Callback<R(B0, B1, B2, A0, A1)> cb, C0 c0, C1 c1, C2 c2); 01562 01563 /** Creates an event bound to the event queue 01564 * @see EventQueue::event 01565 */ 01566 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> 01567 Event<void(A0, A1)> event(R (*func)(B0, B1, B2, B3, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3); 01568 01569 /** Creates an event bound to the event queue 01570 * @see EventQueue::event 01571 */ 01572 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> 01573 Event<void(A0, A1)> event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3); 01574 01575 /** Creates an event bound to the event queue 01576 * @see EventQueue::event 01577 */ 01578 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> 01579 Event<void(A0, A1)> event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const, C0 c0, C1 c1, C2 c2, C3 c3); 01580 01581 /** Creates an event bound to the event queue 01582 * @see EventQueue::event 01583 */ 01584 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> 01585 Event<void(A0, A1)> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01586 01587 /** Creates an event bound to the event queue 01588 * @see EventQueue::event 01589 */ 01590 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> 01591 Event<void(A0, A1)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1) const volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01592 01593 /** Creates an event bound to the event queue 01594 * @see EventQueue::event 01595 */ 01596 template <typename R, typename B0, typename B1, typename B2, typename B3, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> 01597 Event<void(A0, A1)> event(mbed::Callback<R(B0, B1, B2, B3, A0, A1)> cb, C0 c0, C1 c1, C2 c2, C3 c3); 01598 01599 /** Creates an event bound to the event queue 01600 * @see EventQueue::event 01601 */ 01602 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> 01603 Event<void(A0, A1)> event(R (*func)(B0, B1, B2, B3, B4, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01604 01605 /** Creates an event bound to the event queue 01606 * @see EventQueue::event 01607 */ 01608 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> 01609 Event<void(A0, A1)> event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01610 01611 /** Creates an event bound to the event queue 01612 * @see EventQueue::event 01613 */ 01614 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> 01615 Event<void(A0, A1)> 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); 01616 01617 /** Creates an event bound to the event queue 01618 * @see EventQueue::event 01619 */ 01620 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> 01621 Event<void(A0, A1)> 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); 01622 01623 /** Creates an event bound to the event queue 01624 * @see EventQueue::event 01625 */ 01626 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> 01627 Event<void(A0, A1)> 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); 01628 01629 /** Creates an event bound to the event queue 01630 * @see EventQueue::event 01631 */ 01632 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> 01633 Event<void(A0, A1)> event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01634 01635 /** Creates an event bound to the event queue 01636 * @see EventQueue::event 01637 */ 01638 template <typename R, typename A0, typename A1, typename A2> 01639 Event<void(A0, A1, A2)> event(R (*func)(A0, A1, A2)); 01640 01641 /** Creates an event bound to the event queue 01642 * @see EventQueue::event 01643 */ 01644 template <typename T, typename R, typename A0, typename A1, typename A2> 01645 Event<void(A0, A1, A2)> event(T *obj, R (T::*method)(A0, A1, A2)); 01646 01647 /** Creates an event bound to the event queue 01648 * @see EventQueue::event 01649 */ 01650 template <typename T, typename R, typename A0, typename A1, typename A2> 01651 Event<void(A0, A1, A2)> event(const T *obj, R (T::*method)(A0, A1, A2) const); 01652 01653 /** Creates an event bound to the event queue 01654 * @see EventQueue::event 01655 */ 01656 template <typename T, typename R, typename A0, typename A1, typename A2> 01657 Event<void(A0, A1, A2)> event(volatile T *obj, R (T::*method)(A0, A1, A2) volatile); 01658 01659 /** Creates an event bound to the event queue 01660 * @see EventQueue::event 01661 */ 01662 template <typename T, typename R, typename A0, typename A1, typename A2> 01663 Event<void(A0, A1, A2)> event(const volatile T *obj, R (T::*method)(A0, A1, A2) const volatile); 01664 01665 /** Creates an event bound to the event queue 01666 * @see EventQueue::event 01667 */ 01668 template <typename R, typename A0, typename A1, typename A2> 01669 Event<void(A0, A1, A2)> event(mbed::Callback<R(A0, A1, A2)> cb); 01670 01671 /** Creates an event bound to the event queue 01672 * @see EventQueue::event 01673 */ 01674 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2> 01675 Event<void(A0, A1, A2)> event(R (*func)(B0, A0, A1, A2), C0 c0); 01676 01677 /** Creates an event bound to the event queue 01678 * @see EventQueue::event 01679 */ 01680 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> 01681 Event<void(A0, A1, A2)> event(T *obj, R (T::*method)(B0, A0, A1, A2), C0 c0); 01682 01683 /** Creates an event bound to the event queue 01684 * @see EventQueue::event 01685 */ 01686 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> 01687 Event<void(A0, A1, A2)> event(const T *obj, R (T::*method)(B0, A0, A1, A2) const, C0 c0); 01688 01689 /** Creates an event bound to the event queue 01690 * @see EventQueue::event 01691 */ 01692 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> 01693 Event<void(A0, A1, A2)> event(volatile T *obj, R (T::*method)(B0, A0, A1, A2) volatile, C0 c0); 01694 01695 /** Creates an event bound to the event queue 01696 * @see EventQueue::event 01697 */ 01698 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2> 01699 Event<void(A0, A1, A2)> event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2) const volatile, C0 c0); 01700 01701 /** Creates an event bound to the event queue 01702 * @see EventQueue::event 01703 */ 01704 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2> 01705 Event<void(A0, A1, A2)> event(mbed::Callback<R(B0, A0, A1, A2)> cb, C0 c0); 01706 01707 /** Creates an event bound to the event queue 01708 * @see EventQueue::event 01709 */ 01710 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> 01711 Event<void(A0, A1, A2)> event(R (*func)(B0, B1, A0, A1, A2), C0 c0, C1 c1); 01712 01713 /** Creates an event bound to the event queue 01714 * @see EventQueue::event 01715 */ 01716 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> 01717 Event<void(A0, A1, A2)> event(T *obj, R (T::*method)(B0, B1, A0, A1, A2), C0 c0, C1 c1); 01718 01719 /** Creates an event bound to the event queue 01720 * @see EventQueue::event 01721 */ 01722 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> 01723 Event<void(A0, A1, A2)> event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2) const, C0 c0, C1 c1); 01724 01725 /** Creates an event bound to the event queue 01726 * @see EventQueue::event 01727 */ 01728 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> 01729 Event<void(A0, A1, A2)> event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) volatile, C0 c0, C1 c1); 01730 01731 /** Creates an event bound to the event queue 01732 * @see EventQueue::event 01733 */ 01734 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> 01735 Event<void(A0, A1, A2)> event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2) const volatile, C0 c0, C1 c1); 01736 01737 /** Creates an event bound to the event queue 01738 * @see EventQueue::event 01739 */ 01740 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2> 01741 Event<void(A0, A1, A2)> event(mbed::Callback<R(B0, B1, A0, A1, A2)> cb, C0 c0, C1 c1); 01742 01743 /** Creates an event bound to the event queue 01744 * @see EventQueue::event 01745 */ 01746 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 01747 Event<void(A0, A1, A2)> event(R (*func)(B0, B1, B2, A0, A1, A2), C0 c0, C1 c1, C2 c2); 01748 01749 /** Creates an event bound to the event queue 01750 * @see EventQueue::event 01751 */ 01752 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 01753 Event<void(A0, A1, A2)> event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2), C0 c0, C1 c1, C2 c2); 01754 01755 /** Creates an event bound to the event queue 01756 * @see EventQueue::event 01757 */ 01758 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 01759 Event<void(A0, A1, A2)> event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const, C0 c0, C1 c1, C2 c2); 01760 01761 /** Creates an event bound to the event queue 01762 * @see EventQueue::event 01763 */ 01764 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 01765 Event<void(A0, A1, A2)> event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2); 01766 01767 /** Creates an event bound to the event queue 01768 * @see EventQueue::event 01769 */ 01770 template <typename T, typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 01771 Event<void(A0, A1, A2)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2) const volatile, C0 c0, C1 c1, C2 c2); 01772 01773 /** Creates an event bound to the event queue 01774 * @see EventQueue::event 01775 */ 01776 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 01777 Event<void(A0, A1, A2)> event(mbed::Callback<R(B0, B1, B2, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2); 01778 01779 /** Creates an event bound to the event queue 01780 * @see EventQueue::event 01781 */ 01782 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> 01783 Event<void(A0, A1, A2)> event(R (*func)(B0, B1, B2, B3, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3); 01784 01785 /** Creates an event bound to the event queue 01786 * @see EventQueue::event 01787 */ 01788 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> 01789 Event<void(A0, A1, A2)> event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3); 01790 01791 /** Creates an event bound to the event queue 01792 * @see EventQueue::event 01793 */ 01794 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> 01795 Event<void(A0, A1, A2)> event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) const, C0 c0, C1 c1, C2 c2, C3 c3); 01796 01797 /** Creates an event bound to the event queue 01798 * @see EventQueue::event 01799 */ 01800 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> 01801 Event<void(A0, A1, A2)> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2) volatile, C0 c0, C1 c1, C2 c2, C3 c3); 01802 01803 /** Creates an event bound to the event queue 01804 * @see EventQueue::event 01805 */ 01806 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> 01807 Event<void(A0, A1, A2)> 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); 01808 01809 /** Creates an event bound to the event queue 01810 * @see EventQueue::event 01811 */ 01812 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> 01813 Event<void(A0, A1, A2)> event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2, C3 c3); 01814 01815 /** Creates an event bound to the event queue 01816 * @see EventQueue::event 01817 */ 01818 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> 01819 Event<void(A0, A1, A2)> event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01820 01821 /** Creates an event bound to the event queue 01822 * @see EventQueue::event 01823 */ 01824 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> 01825 Event<void(A0, A1, A2)> event(T *obj, R (T::*method)(B0, B1, B2, B3, B4, A0, A1, A2), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01826 01827 /** Creates an event bound to the event queue 01828 * @see EventQueue::event 01829 */ 01830 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> 01831 Event<void(A0, A1, A2)> 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); 01832 01833 /** Creates an event bound to the event queue 01834 * @see EventQueue::event 01835 */ 01836 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> 01837 Event<void(A0, A1, A2)> 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); 01838 01839 /** Creates an event bound to the event queue 01840 * @see EventQueue::event 01841 */ 01842 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> 01843 Event<void(A0, A1, A2)> 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); 01844 01845 /** Creates an event bound to the event queue 01846 * @see EventQueue::event 01847 */ 01848 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> 01849 Event<void(A0, A1, A2)> event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 01850 01851 /** Creates an event bound to the event queue 01852 * @see EventQueue::event 01853 */ 01854 template <typename R, typename A0, typename A1, typename A2, typename A3> 01855 Event<void(A0, A1, A2, A3)> event(R (*func)(A0, A1, A2, A3)); 01856 01857 /** Creates an event bound to the event queue 01858 * @see EventQueue::event 01859 */ 01860 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 01861 Event<void(A0, A1, A2, A3)> event(T *obj, R (T::*method)(A0, A1, A2, A3)); 01862 01863 /** Creates an event bound to the event queue 01864 * @see EventQueue::event 01865 */ 01866 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 01867 Event<void(A0, A1, A2, A3)> event(const T *obj, R (T::*method)(A0, A1, A2, A3) const); 01868 01869 /** Creates an event bound to the event queue 01870 * @see EventQueue::event 01871 */ 01872 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 01873 Event<void(A0, A1, A2, A3)> event(volatile T *obj, R (T::*method)(A0, A1, A2, A3) volatile); 01874 01875 /** Creates an event bound to the event queue 01876 * @see EventQueue::event 01877 */ 01878 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3> 01879 Event<void(A0, A1, A2, A3)> event(const volatile T *obj, R (T::*method)(A0, A1, A2, A3) const volatile); 01880 01881 /** Creates an event bound to the event queue 01882 * @see EventQueue::event 01883 */ 01884 template <typename R, typename A0, typename A1, typename A2, typename A3> 01885 Event<void(A0, A1, A2, A3)> event(mbed::Callback<R(A0, A1, A2, A3)> cb); 01886 01887 /** Creates an event bound to the event queue 01888 * @see EventQueue::event 01889 */ 01890 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> 01891 Event<void(A0, A1, A2, A3)> event(R (*func)(B0, A0, A1, A2, A3), C0 c0); 01892 01893 /** Creates an event bound to the event queue 01894 * @see EventQueue::event 01895 */ 01896 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> 01897 Event<void(A0, A1, A2, A3)> event(T *obj, R (T::*method)(B0, A0, A1, A2, A3), C0 c0); 01898 01899 /** Creates an event bound to the event queue 01900 * @see EventQueue::event 01901 */ 01902 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> 01903 Event<void(A0, A1, A2, A3)> event(const T *obj, R (T::*method)(B0, A0, A1, A2, A3) const, C0 c0); 01904 01905 /** Creates an event bound to the event queue 01906 * @see EventQueue::event 01907 */ 01908 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> 01909 Event<void(A0, A1, A2, A3)> event(volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) volatile, C0 c0); 01910 01911 /** Creates an event bound to the event queue 01912 * @see EventQueue::event 01913 */ 01914 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> 01915 Event<void(A0, A1, A2, A3)> event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3) const volatile, C0 c0); 01916 01917 /** Creates an event bound to the event queue 01918 * @see EventQueue::event 01919 */ 01920 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3> 01921 Event<void(A0, A1, A2, A3)> event(mbed::Callback<R(B0, A0, A1, A2, A3)> cb, C0 c0); 01922 01923 /** Creates an event bound to the event queue 01924 * @see EventQueue::event 01925 */ 01926 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 01927 Event<void(A0, A1, A2, A3)> event(R (*func)(B0, B1, A0, A1, A2, A3), C0 c0, C1 c1); 01928 01929 /** Creates an event bound to the event queue 01930 * @see EventQueue::event 01931 */ 01932 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 01933 Event<void(A0, A1, A2, A3)> event(T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3), C0 c0, C1 c1); 01934 01935 /** Creates an event bound to the event queue 01936 * @see EventQueue::event 01937 */ 01938 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 01939 Event<void(A0, A1, A2, A3)> event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const, C0 c0, C1 c1); 01940 01941 /** Creates an event bound to the event queue 01942 * @see EventQueue::event 01943 */ 01944 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 01945 Event<void(A0, A1, A2, A3)> event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) volatile, C0 c0, C1 c1); 01946 01947 /** Creates an event bound to the event queue 01948 * @see EventQueue::event 01949 */ 01950 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 01951 Event<void(A0, A1, A2, A3)> event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3) const volatile, C0 c0, C1 c1); 01952 01953 /** Creates an event bound to the event queue 01954 * @see EventQueue::event 01955 */ 01956 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 01957 Event<void(A0, A1, A2, A3)> event(mbed::Callback<R(B0, B1, A0, A1, A2, A3)> cb, C0 c0, C1 c1); 01958 01959 /** Creates an event bound to the event queue 01960 * @see EventQueue::event 01961 */ 01962 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> 01963 Event<void(A0, A1, A2, A3)> event(R (*func)(B0, B1, B2, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2); 01964 01965 /** Creates an event bound to the event queue 01966 * @see EventQueue::event 01967 */ 01968 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> 01969 Event<void(A0, A1, A2, A3)> event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2); 01970 01971 /** Creates an event bound to the event queue 01972 * @see EventQueue::event 01973 */ 01974 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> 01975 Event<void(A0, A1, A2, A3)> event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2); 01976 01977 /** Creates an event bound to the event queue 01978 * @see EventQueue::event 01979 */ 01980 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> 01981 Event<void(A0, A1, A2, A3)> event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2); 01982 01983 /** Creates an event bound to the event queue 01984 * @see EventQueue::event 01985 */ 01986 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> 01987 Event<void(A0, A1, A2, A3)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3) const volatile, C0 c0, C1 c1, C2 c2); 01988 01989 /** Creates an event bound to the event queue 01990 * @see EventQueue::event 01991 */ 01992 template <typename R, typename B0, typename B1, typename B2, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> 01993 Event<void(A0, A1, A2, A3)> event(mbed::Callback<R(B0, B1, B2, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2); 01994 01995 /** Creates an event bound to the event queue 01996 * @see EventQueue::event 01997 */ 01998 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> 01999 Event<void(A0, A1, A2, A3)> event(R (*func)(B0, B1, B2, B3, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3); 02000 02001 /** Creates an event bound to the event queue 02002 * @see EventQueue::event 02003 */ 02004 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> 02005 Event<void(A0, A1, A2, A3)> event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3); 02006 02007 /** Creates an event bound to the event queue 02008 * @see EventQueue::event 02009 */ 02010 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> 02011 Event<void(A0, A1, A2, A3)> event(const T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) const, C0 c0, C1 c1, C2 c2, C3 c3); 02012 02013 /** Creates an event bound to the event queue 02014 * @see EventQueue::event 02015 */ 02016 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> 02017 Event<void(A0, A1, A2, A3)> event(volatile T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3) volatile, C0 c0, C1 c1, C2 c2, C3 c3); 02018 02019 /** Creates an event bound to the event queue 02020 * @see EventQueue::event 02021 */ 02022 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> 02023 Event<void(A0, A1, A2, A3)> 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); 02024 02025 /** Creates an event bound to the event queue 02026 * @see EventQueue::event 02027 */ 02028 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> 02029 Event<void(A0, A1, A2, A3)> event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2, C3 c3); 02030 02031 /** Creates an event bound to the event queue 02032 * @see EventQueue::event 02033 */ 02034 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> 02035 Event<void(A0, A1, A2, A3)> event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2, A3), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 02036 02037 /** Creates an event bound to the event queue 02038 * @see EventQueue::event 02039 */ 02040 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> 02041 Event<void(A0, A1, A2, A3)> 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); 02042 02043 /** Creates an event bound to the event queue 02044 * @see EventQueue::event 02045 */ 02046 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> 02047 Event<void(A0, A1, A2, A3)> 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); 02048 02049 /** Creates an event bound to the event queue 02050 * @see EventQueue::event 02051 */ 02052 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> 02053 Event<void(A0, A1, A2, A3)> 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); 02054 02055 /** Creates an event bound to the event queue 02056 * @see EventQueue::event 02057 */ 02058 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> 02059 Event<void(A0, A1, A2, A3)> 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); 02060 02061 /** Creates an event bound to the event queue 02062 * @see EventQueue::event 02063 */ 02064 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> 02065 Event<void(A0, A1, A2, A3)> event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2, A3)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 02066 02067 /** Creates an event bound to the event queue 02068 * @see EventQueue::event 02069 */ 02070 template <typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 02071 Event<void(A0, A1, A2, A3, A4)> event(R (*func)(A0, A1, A2, A3, A4)); 02072 02073 /** Creates an event bound to the event queue 02074 * @see EventQueue::event 02075 */ 02076 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 02077 Event<void(A0, A1, A2, A3, A4)> event(T *obj, R (T::*method)(A0, A1, A2, A3, A4)); 02078 02079 /** Creates an event bound to the event queue 02080 * @see EventQueue::event 02081 */ 02082 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 02083 Event<void(A0, A1, A2, A3, A4)> event(const T *obj, R (T::*method)(A0, A1, A2, A3, A4) const); 02084 02085 /** Creates an event bound to the event queue 02086 * @see EventQueue::event 02087 */ 02088 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 02089 Event<void(A0, A1, A2, A3, A4)> event(volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) volatile); 02090 02091 /** Creates an event bound to the event queue 02092 * @see EventQueue::event 02093 */ 02094 template <typename T, typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 02095 Event<void(A0, A1, A2, A3, A4)> event(const volatile T *obj, R (T::*method)(A0, A1, A2, A3, A4) const volatile); 02096 02097 /** Creates an event bound to the event queue 02098 * @see EventQueue::event 02099 */ 02100 template <typename R, typename A0, typename A1, typename A2, typename A3, typename A4> 02101 Event<void(A0, A1, A2, A3, A4)> event(mbed::Callback<R(A0, A1, A2, A3, A4)> cb); 02102 02103 /** Creates an event bound to the event queue 02104 * @see EventQueue::event 02105 */ 02106 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02107 Event<void(A0, A1, A2, A3, A4)> event(R (*func)(B0, A0, A1, A2, A3, A4), C0 c0); 02108 02109 /** Creates an event bound to the event queue 02110 * @see EventQueue::event 02111 */ 02112 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02113 Event<void(A0, A1, A2, A3, A4)> event(T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4), C0 c0); 02114 02115 /** Creates an event bound to the event queue 02116 * @see EventQueue::event 02117 */ 02118 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02119 Event<void(A0, A1, A2, A3, A4)> event(const T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const, C0 c0); 02120 02121 /** Creates an event bound to the event queue 02122 * @see EventQueue::event 02123 */ 02124 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02125 Event<void(A0, A1, A2, A3, A4)> event(volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) volatile, C0 c0); 02126 02127 /** Creates an event bound to the event queue 02128 * @see EventQueue::event 02129 */ 02130 template <typename T, typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02131 Event<void(A0, A1, A2, A3, A4)> event(const volatile T *obj, R (T::*method)(B0, A0, A1, A2, A3, A4) const volatile, C0 c0); 02132 02133 /** Creates an event bound to the event queue 02134 * @see EventQueue::event 02135 */ 02136 template <typename R, typename B0, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02137 Event<void(A0, A1, A2, A3, A4)> event(mbed::Callback<R(B0, A0, A1, A2, A3, A4)> cb, C0 c0); 02138 02139 /** Creates an event bound to the event queue 02140 * @see EventQueue::event 02141 */ 02142 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02143 Event<void(A0, A1, A2, A3, A4)> event(R (*func)(B0, B1, A0, A1, A2, A3, A4), C0 c0, C1 c1); 02144 02145 /** Creates an event bound to the event queue 02146 * @see EventQueue::event 02147 */ 02148 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02149 Event<void(A0, A1, A2, A3, A4)> event(T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4), C0 c0, C1 c1); 02150 02151 /** Creates an event bound to the event queue 02152 * @see EventQueue::event 02153 */ 02154 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02155 Event<void(A0, A1, A2, A3, A4)> event(const T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const, C0 c0, C1 c1); 02156 02157 /** Creates an event bound to the event queue 02158 * @see EventQueue::event 02159 */ 02160 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02161 Event<void(A0, A1, A2, A3, A4)> event(volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1); 02162 02163 /** Creates an event bound to the event queue 02164 * @see EventQueue::event 02165 */ 02166 template <typename T, typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02167 Event<void(A0, A1, A2, A3, A4)> event(const volatile T *obj, R (T::*method)(B0, B1, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1); 02168 02169 /** Creates an event bound to the event queue 02170 * @see EventQueue::event 02171 */ 02172 template <typename R, typename B0, typename B1, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02173 Event<void(A0, A1, A2, A3, A4)> event(mbed::Callback<R(B0, B1, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1); 02174 02175 /** Creates an event bound to the event queue 02176 * @see EventQueue::event 02177 */ 02178 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> 02179 Event<void(A0, A1, A2, A3, A4)> event(R (*func)(B0, B1, B2, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2); 02180 02181 /** Creates an event bound to the event queue 02182 * @see EventQueue::event 02183 */ 02184 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> 02185 Event<void(A0, A1, A2, A3, A4)> event(T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2); 02186 02187 /** Creates an event bound to the event queue 02188 * @see EventQueue::event 02189 */ 02190 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> 02191 Event<void(A0, A1, A2, A3, A4)> event(const T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const, C0 c0, C1 c1, C2 c2); 02192 02193 /** Creates an event bound to the event queue 02194 * @see EventQueue::event 02195 */ 02196 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> 02197 Event<void(A0, A1, A2, A3, A4)> event(volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) volatile, C0 c0, C1 c1, C2 c2); 02198 02199 /** Creates an event bound to the event queue 02200 * @see EventQueue::event 02201 */ 02202 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> 02203 Event<void(A0, A1, A2, A3, A4)> event(const volatile T *obj, R (T::*method)(B0, B1, B2, A0, A1, A2, A3, A4) const volatile, C0 c0, C1 c1, C2 c2); 02204 02205 /** Creates an event bound to the event queue 02206 * @see EventQueue::event 02207 */ 02208 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> 02209 Event<void(A0, A1, A2, A3, A4)> event(mbed::Callback<R(B0, B1, B2, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2); 02210 02211 /** Creates an event bound to the event queue 02212 * @see EventQueue::event 02213 */ 02214 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> 02215 Event<void(A0, A1, A2, A3, A4)> event(R (*func)(B0, B1, B2, B3, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3); 02216 02217 /** Creates an event bound to the event queue 02218 * @see EventQueue::event 02219 */ 02220 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> 02221 Event<void(A0, A1, A2, A3, A4)> event(T *obj, R (T::*method)(B0, B1, B2, B3, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3); 02222 02223 /** Creates an event bound to the event queue 02224 * @see EventQueue::event 02225 */ 02226 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> 02227 Event<void(A0, A1, A2, A3, A4)> 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); 02228 02229 /** Creates an event bound to the event queue 02230 * @see EventQueue::event 02231 */ 02232 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> 02233 Event<void(A0, A1, A2, A3, A4)> 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); 02234 02235 /** Creates an event bound to the event queue 02236 * @see EventQueue::event 02237 */ 02238 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> 02239 Event<void(A0, A1, A2, A3, A4)> 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); 02240 02241 /** Creates an event bound to the event queue 02242 * @see EventQueue::event 02243 */ 02244 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> 02245 Event<void(A0, A1, A2, A3, A4)> event(mbed::Callback<R(B0, B1, B2, B3, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2, C3 c3); 02246 02247 /** Creates an event bound to the event queue 02248 * @see EventQueue::event 02249 */ 02250 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> 02251 Event<void(A0, A1, A2, A3, A4)> event(R (*func)(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4), C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 02252 02253 /** Creates an event bound to the event queue 02254 * @see EventQueue::event 02255 */ 02256 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> 02257 Event<void(A0, A1, A2, A3, A4)> 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); 02258 02259 /** Creates an event bound to the event queue 02260 * @see EventQueue::event 02261 */ 02262 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> 02263 Event<void(A0, A1, A2, A3, A4)> 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); 02264 02265 /** Creates an event bound to the event queue 02266 * @see EventQueue::event 02267 */ 02268 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> 02269 Event<void(A0, A1, A2, A3, A4)> 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); 02270 02271 /** Creates an event bound to the event queue 02272 * @see EventQueue::event 02273 */ 02274 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> 02275 Event<void(A0, A1, A2, A3, A4)> 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); 02276 02277 /** Creates an event bound to the event queue 02278 * @see EventQueue::event 02279 */ 02280 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> 02281 Event<void(A0, A1, A2, A3, A4)> event(mbed::Callback<R(B0, B1, B2, B3, B4, A0, A1, A2, A3, A4)> cb, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4); 02282 02283 protected: 02284 template <typename F> 02285 friend class Event; 02286 struct equeue _equeue; 02287 mbed::Callback<void(int)> _update; 02288 02289 // Function attributes 02290 template <typename F> 02291 static void function_call(void *p) { 02292 (*(F*)p)(); 02293 } 02294 02295 template <typename F> 02296 static void function_dtor(void *p) { 02297 ((F*)p)->~F(); 02298 } 02299 02300 // Context structures 02301 template <typename F> 02302 struct context00 { 02303 F f; 02304 02305 context00(F f) 02306 : f(f) {} 02307 02308 void operator()() { 02309 f(); 02310 } 02311 }; 02312 02313 template <typename F, typename C0> 02314 struct context10 { 02315 F f; C0 c0; 02316 02317 context10(F f, C0 c0) 02318 : f(f), c0(c0) {} 02319 02320 void operator()() { 02321 f(c0); 02322 } 02323 }; 02324 02325 template <typename F, typename C0, typename C1> 02326 struct context20 { 02327 F f; C0 c0; C1 c1; 02328 02329 context20(F f, C0 c0, C1 c1) 02330 : f(f), c0(c0), c1(c1) {} 02331 02332 void operator()() { 02333 f(c0, c1); 02334 } 02335 }; 02336 02337 template <typename F, typename C0, typename C1, typename C2> 02338 struct context30 { 02339 F f; C0 c0; C1 c1; C2 c2; 02340 02341 context30(F f, C0 c0, C1 c1, C2 c2) 02342 : f(f), c0(c0), c1(c1), c2(c2) {} 02343 02344 void operator()() { 02345 f(c0, c1, c2); 02346 } 02347 }; 02348 02349 template <typename F, typename C0, typename C1, typename C2, typename C3> 02350 struct context40 { 02351 F f; C0 c0; C1 c1; C2 c2; C3 c3; 02352 02353 context40(F f, C0 c0, C1 c1, C2 c2, C3 c3) 02354 : f(f), c0(c0), c1(c1), c2(c2), c3(c3) {} 02355 02356 void operator()() { 02357 f(c0, c1, c2, c3); 02358 } 02359 }; 02360 02361 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4> 02362 struct context50 { 02363 F f; C0 c0; C1 c1; C2 c2; C3 c3; C4 c4; 02364 02365 context50(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) 02366 : f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {} 02367 02368 void operator()() { 02369 f(c0, c1, c2, c3, c4); 02370 } 02371 }; 02372 02373 template <typename F, typename A0> 02374 struct context01 { 02375 F f; 02376 02377 context01(F f) 02378 : f(f) {} 02379 02380 void operator()(A0 a0) { 02381 f(a0); 02382 } 02383 }; 02384 02385 template <typename F, typename C0, typename A0> 02386 struct context11 { 02387 F f; C0 c0; 02388 02389 context11(F f, C0 c0) 02390 : f(f), c0(c0) {} 02391 02392 void operator()(A0 a0) { 02393 f(c0, a0); 02394 } 02395 }; 02396 02397 template <typename F, typename C0, typename C1, typename A0> 02398 struct context21 { 02399 F f; C0 c0; C1 c1; 02400 02401 context21(F f, C0 c0, C1 c1) 02402 : f(f), c0(c0), c1(c1) {} 02403 02404 void operator()(A0 a0) { 02405 f(c0, c1, a0); 02406 } 02407 }; 02408 02409 template <typename F, typename C0, typename C1, typename C2, typename A0> 02410 struct context31 { 02411 F f; C0 c0; C1 c1; C2 c2; 02412 02413 context31(F f, C0 c0, C1 c1, C2 c2) 02414 : f(f), c0(c0), c1(c1), c2(c2) {} 02415 02416 void operator()(A0 a0) { 02417 f(c0, c1, c2, a0); 02418 } 02419 }; 02420 02421 template <typename F, typename C0, typename C1, typename C2, typename C3, typename A0> 02422 struct context41 { 02423 F f; C0 c0; C1 c1; C2 c2; C3 c3; 02424 02425 context41(F f, C0 c0, C1 c1, C2 c2, C3 c3) 02426 : f(f), c0(c0), c1(c1), c2(c2), c3(c3) {} 02427 02428 void operator()(A0 a0) { 02429 f(c0, c1, c2, c3, a0); 02430 } 02431 }; 02432 02433 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0> 02434 struct context51 { 02435 F f; C0 c0; C1 c1; C2 c2; C3 c3; C4 c4; 02436 02437 context51(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) 02438 : f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {} 02439 02440 void operator()(A0 a0) { 02441 f(c0, c1, c2, c3, c4, a0); 02442 } 02443 }; 02444 02445 template <typename F, typename A0, typename A1> 02446 struct context02 { 02447 F f; 02448 02449 context02(F f) 02450 : f(f) {} 02451 02452 void operator()(A0 a0, A1 a1) { 02453 f(a0, a1); 02454 } 02455 }; 02456 02457 template <typename F, typename C0, typename A0, typename A1> 02458 struct context12 { 02459 F f; C0 c0; 02460 02461 context12(F f, C0 c0) 02462 : f(f), c0(c0) {} 02463 02464 void operator()(A0 a0, A1 a1) { 02465 f(c0, a0, a1); 02466 } 02467 }; 02468 02469 template <typename F, typename C0, typename C1, typename A0, typename A1> 02470 struct context22 { 02471 F f; C0 c0; C1 c1; 02472 02473 context22(F f, C0 c0, C1 c1) 02474 : f(f), c0(c0), c1(c1) {} 02475 02476 void operator()(A0 a0, A1 a1) { 02477 f(c0, c1, a0, a1); 02478 } 02479 }; 02480 02481 template <typename F, typename C0, typename C1, typename C2, typename A0, typename A1> 02482 struct context32 { 02483 F f; C0 c0; C1 c1; C2 c2; 02484 02485 context32(F f, C0 c0, C1 c1, C2 c2) 02486 : f(f), c0(c0), c1(c1), c2(c2) {} 02487 02488 void operator()(A0 a0, A1 a1) { 02489 f(c0, c1, c2, a0, a1); 02490 } 02491 }; 02492 02493 template <typename F, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1> 02494 struct context42 { 02495 F f; C0 c0; C1 c1; C2 c2; C3 c3; 02496 02497 context42(F f, C0 c0, C1 c1, C2 c2, C3 c3) 02498 : f(f), c0(c0), c1(c1), c2(c2), c3(c3) {} 02499 02500 void operator()(A0 a0, A1 a1) { 02501 f(c0, c1, c2, c3, a0, a1); 02502 } 02503 }; 02504 02505 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1> 02506 struct context52 { 02507 F f; C0 c0; C1 c1; C2 c2; C3 c3; C4 c4; 02508 02509 context52(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) 02510 : f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {} 02511 02512 void operator()(A0 a0, A1 a1) { 02513 f(c0, c1, c2, c3, c4, a0, a1); 02514 } 02515 }; 02516 02517 template <typename F, typename A0, typename A1, typename A2> 02518 struct context03 { 02519 F f; 02520 02521 context03(F f) 02522 : f(f) {} 02523 02524 void operator()(A0 a0, A1 a1, A2 a2) { 02525 f(a0, a1, a2); 02526 } 02527 }; 02528 02529 template <typename F, typename C0, typename A0, typename A1, typename A2> 02530 struct context13 { 02531 F f; C0 c0; 02532 02533 context13(F f, C0 c0) 02534 : f(f), c0(c0) {} 02535 02536 void operator()(A0 a0, A1 a1, A2 a2) { 02537 f(c0, a0, a1, a2); 02538 } 02539 }; 02540 02541 template <typename F, typename C0, typename C1, typename A0, typename A1, typename A2> 02542 struct context23 { 02543 F f; C0 c0; C1 c1; 02544 02545 context23(F f, C0 c0, C1 c1) 02546 : f(f), c0(c0), c1(c1) {} 02547 02548 void operator()(A0 a0, A1 a1, A2 a2) { 02549 f(c0, c1, a0, a1, a2); 02550 } 02551 }; 02552 02553 template <typename F, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2> 02554 struct context33 { 02555 F f; C0 c0; C1 c1; C2 c2; 02556 02557 context33(F f, C0 c0, C1 c1, C2 c2) 02558 : f(f), c0(c0), c1(c1), c2(c2) {} 02559 02560 void operator()(A0 a0, A1 a1, A2 a2) { 02561 f(c0, c1, c2, a0, a1, a2); 02562 } 02563 }; 02564 02565 template <typename F, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2> 02566 struct context43 { 02567 F f; C0 c0; C1 c1; C2 c2; C3 c3; 02568 02569 context43(F f, C0 c0, C1 c1, C2 c2, C3 c3) 02570 : f(f), c0(c0), c1(c1), c2(c2), c3(c3) {} 02571 02572 void operator()(A0 a0, A1 a1, A2 a2) { 02573 f(c0, c1, c2, c3, a0, a1, a2); 02574 } 02575 }; 02576 02577 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2> 02578 struct context53 { 02579 F f; C0 c0; C1 c1; C2 c2; C3 c3; C4 c4; 02580 02581 context53(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) 02582 : f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {} 02583 02584 void operator()(A0 a0, A1 a1, A2 a2) { 02585 f(c0, c1, c2, c3, c4, a0, a1, a2); 02586 } 02587 }; 02588 02589 template <typename F, typename A0, typename A1, typename A2, typename A3> 02590 struct context04 { 02591 F f; 02592 02593 context04(F f) 02594 : f(f) {} 02595 02596 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { 02597 f(a0, a1, a2, a3); 02598 } 02599 }; 02600 02601 template <typename F, typename C0, typename A0, typename A1, typename A2, typename A3> 02602 struct context14 { 02603 F f; C0 c0; 02604 02605 context14(F f, C0 c0) 02606 : f(f), c0(c0) {} 02607 02608 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { 02609 f(c0, a0, a1, a2, a3); 02610 } 02611 }; 02612 02613 template <typename F, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3> 02614 struct context24 { 02615 F f; C0 c0; C1 c1; 02616 02617 context24(F f, C0 c0, C1 c1) 02618 : f(f), c0(c0), c1(c1) {} 02619 02620 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { 02621 f(c0, c1, a0, a1, a2, a3); 02622 } 02623 }; 02624 02625 template <typename F, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3> 02626 struct context34 { 02627 F f; C0 c0; C1 c1; C2 c2; 02628 02629 context34(F f, C0 c0, C1 c1, C2 c2) 02630 : f(f), c0(c0), c1(c1), c2(c2) {} 02631 02632 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { 02633 f(c0, c1, c2, a0, a1, a2, a3); 02634 } 02635 }; 02636 02637 template <typename F, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3> 02638 struct context44 { 02639 F f; C0 c0; C1 c1; C2 c2; C3 c3; 02640 02641 context44(F f, C0 c0, C1 c1, C2 c2, C3 c3) 02642 : f(f), c0(c0), c1(c1), c2(c2), c3(c3) {} 02643 02644 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { 02645 f(c0, c1, c2, c3, a0, a1, a2, a3); 02646 } 02647 }; 02648 02649 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3> 02650 struct context54 { 02651 F f; C0 c0; C1 c1; C2 c2; C3 c3; C4 c4; 02652 02653 context54(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) 02654 : f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {} 02655 02656 void operator()(A0 a0, A1 a1, A2 a2, A3 a3) { 02657 f(c0, c1, c2, c3, c4, a0, a1, a2, a3); 02658 } 02659 }; 02660 02661 template <typename F, typename A0, typename A1, typename A2, typename A3, typename A4> 02662 struct context05 { 02663 F f; 02664 02665 context05(F f) 02666 : f(f) {} 02667 02668 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 02669 f(a0, a1, a2, a3, a4); 02670 } 02671 }; 02672 02673 template <typename F, typename C0, typename A0, typename A1, typename A2, typename A3, typename A4> 02674 struct context15 { 02675 F f; C0 c0; 02676 02677 context15(F f, C0 c0) 02678 : f(f), c0(c0) {} 02679 02680 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 02681 f(c0, a0, a1, a2, a3, a4); 02682 } 02683 }; 02684 02685 template <typename F, typename C0, typename C1, typename A0, typename A1, typename A2, typename A3, typename A4> 02686 struct context25 { 02687 F f; C0 c0; C1 c1; 02688 02689 context25(F f, C0 c0, C1 c1) 02690 : f(f), c0(c0), c1(c1) {} 02691 02692 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 02693 f(c0, c1, a0, a1, a2, a3, a4); 02694 } 02695 }; 02696 02697 template <typename F, typename C0, typename C1, typename C2, typename A0, typename A1, typename A2, typename A3, typename A4> 02698 struct context35 { 02699 F f; C0 c0; C1 c1; C2 c2; 02700 02701 context35(F f, C0 c0, C1 c1, C2 c2) 02702 : f(f), c0(c0), c1(c1), c2(c2) {} 02703 02704 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 02705 f(c0, c1, c2, a0, a1, a2, a3, a4); 02706 } 02707 }; 02708 02709 template <typename F, typename C0, typename C1, typename C2, typename C3, typename A0, typename A1, typename A2, typename A3, typename A4> 02710 struct context45 { 02711 F f; C0 c0; C1 c1; C2 c2; C3 c3; 02712 02713 context45(F f, C0 c0, C1 c1, C2 c2, C3 c3) 02714 : f(f), c0(c0), c1(c1), c2(c2), c3(c3) {} 02715 02716 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 02717 f(c0, c1, c2, c3, a0, a1, a2, a3, a4); 02718 } 02719 }; 02720 02721 template <typename F, typename C0, typename C1, typename C2, typename C3, typename C4, typename A0, typename A1, typename A2, typename A3, typename A4> 02722 struct context55 { 02723 F f; C0 c0; C1 c1; C2 c2; C3 c3; C4 c4; 02724 02725 context55(F f, C0 c0, C1 c1, C2 c2, C3 c3, C4 c4) 02726 : f(f), c0(c0), c1(c1), c2(c2), c3(c3), c4(c4) {} 02727 02728 void operator()(A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 02729 f(c0, c1, c2, c3, c4, a0, a1, a2, a3, a4); 02730 } 02731 }; 02732 }; 02733 02734 } 02735 02736 #endif 02737
Generated on Tue Jul 12 2022 12:21:50 by
