00001
00002
00003
00004
00005
00006
00007
00008
00009
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