The InspIRCd Project
Home | Developers | Wiki | Forums | Bug Tracker | SVN | Download
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

caller.h

Go to the documentation of this file.
00001 /*       +------------------------------------+
00002  *       | Inspire Internet Relay Chat Daemon |
00003  *       +------------------------------------+
00004  *
00005  *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
00006  * See: http://www.inspircd.org/wiki/index.php/Credits
00007  *
00008  * This program is free but copyrighted software; see
00009  *            the file COPYING for details.
00010  *
00011  * ---------------------------------------------------
00012  */
00013 
00014 #ifndef __CALLER__H__
00015 #define __CALLER__H__
00016 
00050 template <typename ReturnType> class CoreExport HandlerBase0
00051 {
00052  public:
00053         virtual ReturnType Call() = 0;
00054         virtual ~HandlerBase0() { }
00055 };
00056 
00057 template <typename ReturnType, typename Param1> class CoreExport HandlerBase1
00058 {
00059  public:
00060         virtual ReturnType Call(Param1) = 0;
00061         virtual ~HandlerBase1() { }
00062 };
00063 
00064 template <typename ReturnType, typename Param1, typename Param2> class CoreExport HandlerBase2
00065 {
00066  public:
00067         virtual ReturnType Call(Param1, Param2) = 0;
00068         virtual ~HandlerBase2() { }
00069 };
00070 
00071 template <typename ReturnType, typename Param1, typename Param2, typename Param3> class CoreExport HandlerBase3
00072 {
00073  public:
00074         virtual ReturnType Call(Param1, Param2, Param3) = 0;
00075         virtual ~HandlerBase3() { }
00076 };
00077 
00078 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4> class CoreExport HandlerBase4
00079 {
00080  public:
00081         virtual ReturnType Call(Param1, Param2, Param3, Param4) = 0;
00082         virtual ~HandlerBase4() { }
00083 };
00084 
00085 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5> class CoreExport HandlerBase5
00086 {
00087  public:
00088         virtual ReturnType Call(Param1, Param2, Param3, Param4, Param5) = 0;
00089         virtual ~HandlerBase5() { }
00090 };
00091 
00092 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5, typename Param6> class CoreExport HandlerBase6
00093 {
00094  public:
00095         virtual ReturnType Call(Param1, Param2, Param3, Param4, Param5, Param6) = 0;
00096         virtual ~HandlerBase6() { }
00097 };
00098 
00099 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5, typename Param6, typename Param7> class CoreExport HandlerBase7
00100 {
00101  public:
00102         virtual ReturnType Call(Param1, Param2, Param3, Param4, Param5, Param6, Param7) = 0;
00103         virtual ~HandlerBase7() { }
00104 };
00105 
00106 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5, typename Param6, typename Param7, typename Param8> class CoreExport HandlerBase8
00107 {
00108  public:
00109         virtual ReturnType Call(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8) = 0;
00110         virtual ~HandlerBase8() { }
00111 };
00112 
00113 template <typename HandlerType> class CoreExport caller
00114 {
00115  public:
00116         HandlerType* target;
00117 
00118         caller(HandlerType* initial)
00119         : target(initial)
00120         { }
00121 
00122         virtual ~caller() { }
00123 
00124         caller& operator=(HandlerType* newtarget)
00125         {
00126                 target = newtarget;
00127                 return *this;
00128         }
00129 };
00130 
00131 template <typename ReturnType> class CoreExport caller0 : public caller< HandlerBase0<ReturnType> >
00132 {
00133  public:
00134         caller0(HandlerBase0<ReturnType>* initial)
00135         : caller< HandlerBase0<ReturnType> >::caller(initial)
00136         { }
00137 
00138         virtual ReturnType operator() ()
00139         {
00140                 return this->target->Call();
00141         }
00142 };
00143 
00144 template <typename ReturnType, typename Param1> class CoreExport caller1 : public caller< HandlerBase1<ReturnType, Param1> >
00145 {
00146  public:
00147         caller1(HandlerBase1<ReturnType, Param1>* initial)
00148         : caller< HandlerBase1<ReturnType, Param1> >(initial)
00149         { }
00150 
00151         virtual ReturnType operator() (Param1 param1)
00152         {
00153                 return this->target->Call(param1);
00154         }
00155 };
00156 
00157 template <typename ReturnType, typename Param1, typename Param2> class CoreExport caller2 : public caller< HandlerBase2<ReturnType, Param1, Param2> >
00158 {
00159  public:
00160         caller2(HandlerBase2<ReturnType, Param1, Param2>* initial)
00161         : caller< HandlerBase2<ReturnType, Param1, Param2> >(initial)
00162         { }
00163 
00164         virtual ReturnType operator() (Param1 param1, Param2 param2)
00165         {
00166                 return this->target->Call(param1, param2);
00167         }
00168 };
00169 
00170 template <typename ReturnType, typename Param1, typename Param2, typename Param3> class CoreExport caller3 : public caller< HandlerBase3<ReturnType, Param1, Param2, Param3> >
00171 {
00172  public:
00173         caller3(HandlerBase3<ReturnType, Param1, Param2, Param3>* initial)
00174         : caller< HandlerBase3<ReturnType, Param1, Param2, Param3> >(initial)
00175         { }
00176 
00177         virtual ReturnType operator() (Param1 param1, Param2 param2, Param3 param3)
00178         {
00179                 return this->target->Call(param1, param2, param3);
00180         }
00181 };
00182 
00183 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4> class CoreExport caller4 : public caller< HandlerBase4<ReturnType, Param1, Param2, Param3, Param4> >
00184 {
00185  public:
00186         caller4(HandlerBase4<ReturnType, Param1, Param2, Param3, Param4>* initial)
00187         : caller< HandlerBase4<ReturnType, Param1, Param2, Param3, Param4> >(initial)
00188         { }
00189 
00190         virtual ReturnType operator() (Param1 param1, Param2 param2, Param3 param3, Param4 param4)
00191         {
00192                 return this->target->Call(param1, param2, param3, param4);
00193         }
00194 };
00195 
00196 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5> class CoreExport caller5 : public caller< HandlerBase5<ReturnType, Param1, Param2, Param3, Param4, Param5> >
00197 {
00198  public:
00199         caller5(HandlerBase5<ReturnType, Param1, Param2, Param3, Param4, Param5>* initial)
00200         : caller< HandlerBase5<ReturnType, Param1, Param2, Param3, Param4, Param5> >(initial)
00201         { }
00202 
00203         virtual ReturnType operator() (Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5)
00204         {
00205                 return this->target->Call(param1, param2, param3, param4, param5);
00206         }
00207 };
00208 
00209 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5, typename Param6> class CoreExport caller6 : public caller< HandlerBase6<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6> >
00210 {
00211  public:
00212         caller6(HandlerBase6<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6>* initial)
00213         : caller< HandlerBase6<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6> >(initial)
00214         { }
00215 
00216         virtual ReturnType operator() (Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5, Param6 param6)
00217         {
00218                 return this->target->Call(param1, param2, param3, param4, param5, param6);
00219         }
00220 };
00221 
00222 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5, typename Param6, typename Param7> class CoreExport caller7 : public caller< HandlerBase7<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> >
00223 {
00224  public:
00225         caller7(HandlerBase7<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6, Param7>* initial)
00226         : caller< HandlerBase7<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6, Param7> >(initial)
00227         { }
00228 
00229         virtual ReturnType operator() (Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5, Param6 param6, Param7 param7)
00230         {
00231                 return this->target->Call(param1, param2, param3, param4, param5, param6, param7);
00232         }
00233 };
00234 
00235 template <typename ReturnType, typename Param1, typename Param2, typename Param3, typename Param4, typename Param5, typename Param6, typename Param7, typename Param8> class CoreExport caller8 : public caller< HandlerBase8<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> >
00236 {
00237  public:
00238         caller8(HandlerBase8<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8>* initial)
00239         : caller< HandlerBase8<ReturnType, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8> >(initial)
00240         { }
00241 
00242         virtual ReturnType operator() (Param1 param1, Param2 param2, Param3 param3, Param4 param4, Param5 param5, Param6 param6, Param7 param7, Param8 param8)
00243         {
00244                 return this->target->Call(param1, param2, param3, param4, param5, param6, param7, param8);
00245         }
00246 };
00247 
00255 #define DEFINE_HANDLER0(NAME, RETURN) \
00256         class CoreExport NAME : public HandlerBase0<RETURN> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(); }
00257 
00258 #define DEFINE_HANDLER1(NAME, RETURN, V1) \
00259         class CoreExport NAME : public HandlerBase1<RETURN, V1> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1); }
00260 
00261 #define DEFINE_HANDLER2(NAME, RETURN, V1, V2) \
00262         class CoreExport NAME : public HandlerBase2<RETURN, V1, V2> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2); }
00263 
00264 #define DEFINE_HANDLER3(NAME, RETURN, V1, V2, V3) \
00265         class CoreExport NAME : public HandlerBase3<RETURN, V1, V2, V3> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2, V3); }
00266 
00267 #define DEFINE_HANDLER4(NAME, RETURN, V1, V2, V3, V4) \
00268         class CoreExport NAME : public HandlerBase4<RETURN, V1, V2, V3, V4> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2, V3, V4); }
00269 
00270 #define DEFINE_HANDLER5(NAME, RETURN, V1, V2, V3, V4, V5) \
00271         class CoreExport NAME : public HandlerBase5<RETURN, V1, V2, V3, V4, V5> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2, V3, V4, V5); }
00272 
00273 #define DEFINE_HANDLER6(NAME, RETURN, V1, V2, V3, V4, V5, V6) \
00274         class CoreExport NAME : public HandlerBase6<RETURN, V1, V2, V3, V4, V5, V6> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2, V3, V4, V5, V6); }
00275 
00276 #define DEFINE_HANDLER7(NAME, RETURN, V1, V2, V3, V4, V5, V6, V7) \
00277         class CoreExport NAME : public HandlerBase7<RETURN, V1, V2, V3, V4, V5, V6, V7> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2, V3, V4, V5, V6, V7); }
00278 
00279 #define DEFINE_HANDLER8(NAME, RETURN, V1, V2, V3, V4, V5, V6, V7, V8) \
00280         class CoreExport NAME : public HandlerBase8<RETURN, V1, V2, V3, V4, V5, V6, V7, V8> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1, V2, V3, V4, V5, V6, V7, V8); }
00281 
00282 #endif
00283