sprint 1-alpha
sprint/function/detail/invoker.h
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines