sprint 1-alpha
|
00001 /****************************************************************************** 00002 * sprint::invoker 00003 * 00004 * Copyright (C) 2005-2011 Paolo Medici <www.pmx.it> 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 * 00020 *******************************************************************************/ 00021 00022 #ifndef _SPRINT_invoker_H 00023 #define _SPRINT_invoker_H 00024 00025 // $generated on Oct 30 2011 10:49:02$ 00026 00031 #include <sprint/container/tuple.h> 00032 00033 namespace sprint { 00034 namespace detail { 00035 00036 /* ptr function invoker */ 00037 00039 template<class R> 00040 struct ptr_fun_0 { 00041 typedef R (*CallbackType)(); 00042 typedef tuple1<CallbackType> ParamType; 00043 static R run(const ParamType & p) 00044 { 00045 return (*p.p1)(); 00046 } 00047 }; 00048 template<> 00049 struct ptr_fun_0<void> { 00050 typedef void (*CallbackType)(); 00051 typedef tuple1<CallbackType> ParamType; 00052 static void run(const ParamType & p) 00053 { 00054 (*p.p1)(); 00055 } 00056 }; 00058 template<class R, class P1> 00059 struct ptr_fun_1 { 00060 typedef R (*CallbackType)(P1); 00061 typedef tuple2<CallbackType, P1> ParamType; 00062 static R run(const ParamType & p) 00063 { 00064 return (*p.p1)(p.p2); 00065 } 00066 }; 00067 template<class P1> 00068 struct ptr_fun_1<void, P1> { 00069 typedef void (*CallbackType)(P1); 00070 typedef tuple2<CallbackType, P1> ParamType; 00071 static void run(const ParamType & p) 00072 { 00073 (*p.p1)(p.p2); 00074 } 00075 }; 00077 template<class R, class P1, class P2> 00078 struct ptr_fun_2 { 00079 typedef R (*CallbackType)(P1, P2); 00080 typedef tuple3<CallbackType, P1, P2> ParamType; 00081 static R run(const ParamType & p) 00082 { 00083 return (*p.p1)(p.p2, p.p3); 00084 } 00085 }; 00086 template<class P1, class P2> 00087 struct ptr_fun_2<void, P1, P2> { 00088 typedef void (*CallbackType)(P1, P2); 00089 typedef tuple3<CallbackType, P1, P2> ParamType; 00090 static void run(const ParamType & p) 00091 { 00092 (*p.p1)(p.p2, p.p3); 00093 } 00094 }; 00096 template<class R, class P1, class P2, class P3> 00097 struct ptr_fun_3 { 00098 typedef R (*CallbackType)(P1, P2, P3); 00099 typedef tuple4<CallbackType, P1, P2, P3> ParamType; 00100 static R run(const ParamType & p) 00101 { 00102 return (*p.p1)(p.p2, p.p3, p.p4); 00103 } 00104 }; 00105 template<class P1, class P2, class P3> 00106 struct ptr_fun_3<void, P1, P2, P3> { 00107 typedef void (*CallbackType)(P1, P2, P3); 00108 typedef tuple4<CallbackType, P1, P2, P3> ParamType; 00109 static void run(const ParamType & p) 00110 { 00111 (*p.p1)(p.p2, p.p3, p.p4); 00112 } 00113 }; 00115 template<class R, class P1, class P2, class P3, class P4> 00116 struct ptr_fun_4 { 00117 typedef R (*CallbackType)(P1, P2, P3, P4); 00118 typedef tuple5<CallbackType, P1, P2, P3, P4> ParamType; 00119 static R run(const ParamType & p) 00120 { 00121 return (*p.p1)(p.p2, p.p3, p.p4, p.p5); 00122 } 00123 }; 00124 template<class P1, class P2, class P3, class P4> 00125 struct ptr_fun_4<void, P1, P2, P3, P4> { 00126 typedef void (*CallbackType)(P1, P2, P3, P4); 00127 typedef tuple5<CallbackType, P1, P2, P3, P4> ParamType; 00128 static void run(const ParamType & p) 00129 { 00130 (*p.p1)(p.p2, p.p3, p.p4, p.p5); 00131 } 00132 }; 00134 template<class R, class P1, class P2, class P3, class P4, class P5> 00135 struct ptr_fun_5 { 00136 typedef R (*CallbackType)(P1, P2, P3, P4, P5); 00137 typedef tuple6<CallbackType, P1, P2, P3, P4, P5> ParamType; 00138 static R run(const ParamType & p) 00139 { 00140 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6); 00141 } 00142 }; 00143 template<class P1, class P2, class P3, class P4, class P5> 00144 struct ptr_fun_5<void, P1, P2, P3, P4, P5> { 00145 typedef void (*CallbackType)(P1, P2, P3, P4, P5); 00146 typedef tuple6<CallbackType, P1, P2, P3, P4, P5> ParamType; 00147 static void run(const ParamType & p) 00148 { 00149 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6); 00150 } 00151 }; 00153 template<class R, class P1, class P2, class P3, class P4, class P5, class P6> 00154 struct ptr_fun_6 { 00155 typedef R (*CallbackType)(P1, P2, P3, P4, P5, P6); 00156 typedef tuple7<CallbackType, P1, P2, P3, P4, P5, P6> ParamType; 00157 static R run(const ParamType & p) 00158 { 00159 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7); 00160 } 00161 }; 00162 template<class P1, class P2, class P3, class P4, class P5, class P6> 00163 struct ptr_fun_6<void, P1, P2, P3, P4, P5, P6> { 00164 typedef void (*CallbackType)(P1, P2, P3, P4, P5, P6); 00165 typedef tuple7<CallbackType, P1, P2, P3, P4, P5, P6> ParamType; 00166 static void run(const ParamType & p) 00167 { 00168 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7); 00169 } 00170 }; 00172 template<class R, class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00173 struct ptr_fun_7 { 00174 typedef R (*CallbackType)(P1, P2, P3, P4, P5, P6, P7); 00175 typedef tuple8<CallbackType, P1, P2, P3, P4, P5, P6, P7> ParamType; 00176 static R run(const ParamType & p) 00177 { 00178 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8); 00179 } 00180 }; 00181 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00182 struct ptr_fun_7<void, P1, P2, P3, P4, P5, P6, P7> { 00183 typedef void (*CallbackType)(P1, P2, P3, P4, P5, P6, P7); 00184 typedef tuple8<CallbackType, P1, P2, P3, P4, P5, P6, P7> ParamType; 00185 static void run(const ParamType & p) 00186 { 00187 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8); 00188 } 00189 }; 00191 template<class R, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00192 struct ptr_fun_8 { 00193 typedef R (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8); 00194 typedef tuple9<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8> ParamType; 00195 static R run(const ParamType & p) 00196 { 00197 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9); 00198 } 00199 }; 00200 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00201 struct ptr_fun_8<void, P1, P2, P3, P4, P5, P6, P7, P8> { 00202 typedef void (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8); 00203 typedef tuple9<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8> ParamType; 00204 static void run(const ParamType & p) 00205 { 00206 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9); 00207 } 00208 }; 00210 template<class R, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00211 struct ptr_fun_9 { 00212 typedef R (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9); 00213 typedef tuple10<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8, P9> ParamType; 00214 static R run(const ParamType & p) 00215 { 00216 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10); 00217 } 00218 }; 00219 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00220 struct ptr_fun_9<void, P1, P2, P3, P4, P5, P6, P7, P8, P9> { 00221 typedef void (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9); 00222 typedef tuple10<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8, P9> ParamType; 00223 static void run(const ParamType & p) 00224 { 00225 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10); 00226 } 00227 }; 00229 template<class R, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00230 struct ptr_fun_10 { 00231 typedef R (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10); 00232 typedef tuple11<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> ParamType; 00233 static R run(const ParamType & p) 00234 { 00235 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10, p.p11); 00236 } 00237 }; 00238 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00239 struct ptr_fun_10<void, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> { 00240 typedef void (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10); 00241 typedef tuple11<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> ParamType; 00242 static void run(const ParamType & p) 00243 { 00244 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10, p.p11); 00245 } 00246 }; 00248 template<class R, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> 00249 struct ptr_fun_11 { 00250 typedef R (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11); 00251 typedef tuple12<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> ParamType; 00252 static R run(const ParamType & p) 00253 { 00254 return (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10, p.p11, p.p12); 00255 } 00256 }; 00257 template<class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10, class P11> 00258 struct ptr_fun_11<void, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> { 00259 typedef void (*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11); 00260 typedef tuple12<CallbackType, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> ParamType; 00261 static void run(const ParamType & p) 00262 { 00263 (*p.p1)(p.p2, p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10, p.p11, p.p12); 00264 } 00265 }; 00266 /* member function invoker */ 00267 00269 template<class R, class T> 00270 struct mem_fun_0 { 00271 typedef R (T::*CallbackType)(); 00272 typedef tuple2<CallbackType, T*> ParamType; 00273 static R run(const ParamType & p) 00274 { 00275 return (p.p2->*p.p1)(); 00276 } 00277 }; 00278 template<class T> 00279 struct mem_fun_0<void, T> { 00280 typedef void (T::*CallbackType)(); 00281 typedef tuple2<CallbackType, T*> ParamType; 00282 static void run(const ParamType & p) 00283 { 00284 (p.p2->*p.p1)(); 00285 } 00286 }; 00288 template<class R, class T, class P1> 00289 struct mem_fun_1 { 00290 typedef R (T::*CallbackType)(P1); 00291 typedef tuple3<CallbackType, T*, P1> ParamType; 00292 static R run(const ParamType & p) 00293 { 00294 return (p.p2->*p.p1)(); 00295 } 00296 }; 00297 template<class T, class P1> 00298 struct mem_fun_1<void, T, P1> { 00299 typedef void (T::*CallbackType)(P1); 00300 typedef tuple3<CallbackType, T*, P1> ParamType; 00301 static void run(const ParamType & p) 00302 { 00303 (p.p2->*p.p1)(); 00304 } 00305 }; 00307 template<class R, class T, class P1, class P2> 00308 struct mem_fun_2 { 00309 typedef R (T::*CallbackType)(P1, P2); 00310 typedef tuple4<CallbackType, T*, P1, P2> ParamType; 00311 static R run(const ParamType & p) 00312 { 00313 return (p.p2->*p.p1)(p.p3); 00314 } 00315 }; 00316 template<class T, class P1, class P2> 00317 struct mem_fun_2<void, T, P1, P2> { 00318 typedef void (T::*CallbackType)(P1, P2); 00319 typedef tuple4<CallbackType, T*, P1, P2> ParamType; 00320 static void run(const ParamType & p) 00321 { 00322 (p.p2->*p.p1)(p.p3); 00323 } 00324 }; 00326 template<class R, class T, class P1, class P2, class P3> 00327 struct mem_fun_3 { 00328 typedef R (T::*CallbackType)(P1, P2, P3); 00329 typedef tuple5<CallbackType, T*, P1, P2, P3> ParamType; 00330 static R run(const ParamType & p) 00331 { 00332 return (p.p2->*p.p1)(p.p3, p.p4); 00333 } 00334 }; 00335 template<class T, class P1, class P2, class P3> 00336 struct mem_fun_3<void, T, P1, P2, P3> { 00337 typedef void (T::*CallbackType)(P1, P2, P3); 00338 typedef tuple5<CallbackType, T*, P1, P2, P3> ParamType; 00339 static void run(const ParamType & p) 00340 { 00341 (p.p2->*p.p1)(p.p3, p.p4); 00342 } 00343 }; 00345 template<class R, class T, class P1, class P2, class P3, class P4> 00346 struct mem_fun_4 { 00347 typedef R (T::*CallbackType)(P1, P2, P3, P4); 00348 typedef tuple6<CallbackType, T*, P1, P2, P3, P4> ParamType; 00349 static R run(const ParamType & p) 00350 { 00351 return (p.p2->*p.p1)(p.p3, p.p4, p.p5); 00352 } 00353 }; 00354 template<class T, class P1, class P2, class P3, class P4> 00355 struct mem_fun_4<void, T, P1, P2, P3, P4> { 00356 typedef void (T::*CallbackType)(P1, P2, P3, P4); 00357 typedef tuple6<CallbackType, T*, P1, P2, P3, P4> ParamType; 00358 static void run(const ParamType & p) 00359 { 00360 (p.p2->*p.p1)(p.p3, p.p4, p.p5); 00361 } 00362 }; 00364 template<class R, class T, class P1, class P2, class P3, class P4, class P5> 00365 struct mem_fun_5 { 00366 typedef R (T::*CallbackType)(P1, P2, P3, P4, P5); 00367 typedef tuple7<CallbackType, T*, P1, P2, P3, P4, P5> ParamType; 00368 static R run(const ParamType & p) 00369 { 00370 return (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6); 00371 } 00372 }; 00373 template<class T, class P1, class P2, class P3, class P4, class P5> 00374 struct mem_fun_5<void, T, P1, P2, P3, P4, P5> { 00375 typedef void (T::*CallbackType)(P1, P2, P3, P4, P5); 00376 typedef tuple7<CallbackType, T*, P1, P2, P3, P4, P5> ParamType; 00377 static void run(const ParamType & p) 00378 { 00379 (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6); 00380 } 00381 }; 00383 template<class R, class T, class P1, class P2, class P3, class P4, class P5, class P6> 00384 struct mem_fun_6 { 00385 typedef R (T::*CallbackType)(P1, P2, P3, P4, P5, P6); 00386 typedef tuple8<CallbackType, T*, P1, P2, P3, P4, P5, P6> ParamType; 00387 static R run(const ParamType & p) 00388 { 00389 return (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7); 00390 } 00391 }; 00392 template<class T, class P1, class P2, class P3, class P4, class P5, class P6> 00393 struct mem_fun_6<void, T, P1, P2, P3, P4, P5, P6> { 00394 typedef void (T::*CallbackType)(P1, P2, P3, P4, P5, P6); 00395 typedef tuple8<CallbackType, T*, P1, P2, P3, P4, P5, P6> ParamType; 00396 static void run(const ParamType & p) 00397 { 00398 (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7); 00399 } 00400 }; 00402 template<class R, class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00403 struct mem_fun_7 { 00404 typedef R (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7); 00405 typedef tuple9<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7> ParamType; 00406 static R run(const ParamType & p) 00407 { 00408 return (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8); 00409 } 00410 }; 00411 template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7> 00412 struct mem_fun_7<void, T, P1, P2, P3, P4, P5, P6, P7> { 00413 typedef void (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7); 00414 typedef tuple9<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7> ParamType; 00415 static void run(const ParamType & p) 00416 { 00417 (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8); 00418 } 00419 }; 00421 template<class R, class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00422 struct mem_fun_8 { 00423 typedef R (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8); 00424 typedef tuple10<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7, P8> ParamType; 00425 static R run(const ParamType & p) 00426 { 00427 return (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9); 00428 } 00429 }; 00430 template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8> 00431 struct mem_fun_8<void, T, P1, P2, P3, P4, P5, P6, P7, P8> { 00432 typedef void (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8); 00433 typedef tuple10<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7, P8> ParamType; 00434 static void run(const ParamType & p) 00435 { 00436 (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9); 00437 } 00438 }; 00440 template<class R, class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00441 struct mem_fun_9 { 00442 typedef R (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9); 00443 typedef tuple11<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7, P8, P9> ParamType; 00444 static R run(const ParamType & p) 00445 { 00446 return (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10); 00447 } 00448 }; 00449 template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9> 00450 struct mem_fun_9<void, T, P1, P2, P3, P4, P5, P6, P7, P8, P9> { 00451 typedef void (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9); 00452 typedef tuple11<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7, P8, P9> ParamType; 00453 static void run(const ParamType & p) 00454 { 00455 (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10); 00456 } 00457 }; 00459 template<class R, class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00460 struct mem_fun_10 { 00461 typedef R (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10); 00462 typedef tuple12<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> ParamType; 00463 static R run(const ParamType & p) 00464 { 00465 return (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10, p.p11); 00466 } 00467 }; 00468 template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9, class P10> 00469 struct mem_fun_10<void, T, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> { 00470 typedef void (T::*CallbackType)(P1, P2, P3, P4, P5, P6, P7, P8, P9, P10); 00471 typedef tuple12<CallbackType, T*, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> ParamType; 00472 static void run(const ParamType & p) 00473 { 00474 (p.p2->*p.p1)(p.p3, p.p4, p.p5, p.p6, p.p7, p.p8, p.p9, p.p10, p.p11); 00475 } 00476 }; 00477 00478 } // detail 00479 } // sprint 00480 00481 #endif 00482