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