1 /* 2 * Copyright © 2004-2010 Jens Oknelid, paskharen@gmail.com 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 * 18 * In addition, as a special exception, compiling, linking, and/or 19 * using OpenSSL with this program is allowed. 20 */ 21 22 #pragma once 23 24 class FuncBase 25 { 26 public: FuncBase()27 FuncBase() {} ~FuncBase()28 virtual ~FuncBase() {} 29 virtual void call() = 0; 30 virtual const std::string& getID() = 0; 31 }; 32 33 template<class c> 34 class Func0: public FuncBase 35 { 36 public: Func0(c * obj,void (c::* func)())37 Func0(c *obj, void (c::*func)()) 38 { 39 this->obj = obj; 40 this->func = func; 41 } 42 call()43 void call() { 44 (*obj.*func)(); 45 } 46 getID()47 const std::string& getID() 48 { 49 return obj->getID(); 50 } 51 52 private: 53 c *obj; 54 void (c::*func)(); 55 }; 56 57 template<class c, typename p1> 58 class Func1: public FuncBase 59 { 60 public: Func1(c * obj,void (c::* func)(p1),p1 param1)61 Func1(c *obj, void (c::*func)(p1), p1 param1): 62 _param1(param1) 63 { 64 this->obj = obj; 65 this->func = func; 66 } 67 call()68 void call() { 69 (*obj.*func)(_param1); 70 } 71 getID()72 const std::string& getID() 73 { 74 return obj->getID(); 75 } 76 77 private: 78 c *obj; 79 void (c::*func)(p1); 80 p1 _param1; 81 }; 82 83 template<class c, typename p1, typename p2> 84 class Func2: public FuncBase 85 { 86 public: Func2(c * obj,void (c::* func)(p1,p2),p1 param1,p2 param2)87 Func2(c *obj, void (c::*func)(p1, p2), p1 param1, p2 param2): 88 _param1(param1), 89 _param2(param2) 90 { 91 this->obj = obj; 92 this->func = func; 93 } 94 call()95 void call() { 96 (*obj.*func)(_param1, _param2); 97 } 98 getID()99 const std::string& getID() 100 { 101 return obj->getID(); 102 } 103 104 private: 105 c *obj; 106 void (c::*func)(p1, p2); 107 p1 _param1; 108 p2 _param2; 109 }; 110 111 template<class c, typename p1, typename p2, typename p3> 112 class Func3: public FuncBase 113 { 114 public: Func3(c * obj,void (c::* func)(p1,p2,p3),p1 param1,p2 param2,p3 param3)115 Func3(c *obj, void (c::*func)(p1, p2, p3), p1 param1, p2 param2, p3 param3): 116 _param1(param1), 117 _param2(param2), 118 _param3(param3) 119 { 120 this->obj = obj; 121 this->func = func; 122 } 123 call()124 void call() { 125 (*obj.*func)(_param1, _param2, _param3); 126 } 127 getID()128 const std::string& getID() 129 { 130 return obj->getID(); 131 } 132 133 private: 134 c *obj; 135 void (c::*func)(p1, p2, p3); 136 p1 _param1; 137 p2 _param2; 138 p3 _param3; 139 }; 140 141 template<class c, typename p1, typename p2, typename p3, typename p4> 142 class Func4: public FuncBase 143 { 144 public: Func4(c * obj,void (c::* func)(p1,p2,p3,p4),p1 param1,p2 param2,p3 param3,p4 param4)145 Func4(c *obj, void (c::*func)(p1, p2, p3, p4), 146 p1 param1, p2 param2, p3 param3, p4 param4): 147 _param1(param1), 148 _param2(param2), 149 _param3(param3), 150 _param4(param4) 151 { 152 this->obj = obj; 153 this->func = func; 154 } 155 call()156 void call() { 157 (*obj.*func)(_param1, _param2, _param3, _param4); 158 } 159 getID()160 const std::string& getID() 161 { 162 return obj->getID(); 163 } 164 165 private: 166 c *obj; 167 void (c::*func)(p1, p2, p3, p4); 168 p1 _param1; 169 p2 _param2; 170 p3 _param3; 171 p4 _param4; 172 }; 173 174 template<class c, typename p1, typename p2, typename p3, typename p4, typename p5> 175 class Func5: public FuncBase 176 { 177 public: Func5(c * obj,void (c::* func)(p1,p2,p3,p4,p5),p1 param1,p2 param2,p3 param3,p4 param4,p5 param5)178 Func5(c *obj, void (c::*func)(p1, p2, p3, p4, p5), 179 p1 param1, p2 param2, p3 param3, p4 param4, p5 param5): 180 _param1(param1), 181 _param2(param2), 182 _param3(param3), 183 _param4(param4), 184 _param5(param5) 185 { 186 this->obj = obj; 187 this->func = func; 188 } 189 call()190 void call() { 191 (*obj.*func)(_param1, _param2, _param3, _param4, _param5); 192 } 193 getID()194 const std::string& getID() 195 { 196 return obj->getID(); 197 } 198 199 private: 200 c *obj; 201 void (c::*func)(p1, p2, p3, p4, p5); 202 p1 _param1; 203 p2 _param2; 204 p3 _param3; 205 p4 _param4; 206 p5 _param5; 207 }; 208 209 template<class c, typename p1, typename p2, typename p3, typename p4, typename p5, typename p6> 210 class Func6: public FuncBase 211 { 212 public: Func6(c * obj,void (c::* func)(p1,p2,p3,p4,p5,p6),p1 param1,p2 param2,p3 param3,p4 param4,p5 param5,p6 param6)213 Func6(c *obj, void (c::*func)(p1, p2, p3, p4, p5, p6), 214 p1 param1, p2 param2, p3 param3, p4 param4, p5 param5, p6 param6): 215 _param1(param1), 216 _param2(param2), 217 _param3(param3), 218 _param4(param4), 219 _param5(param5), 220 _param6(param6) 221 { 222 this->obj = obj; 223 this->func = func; 224 } 225 call()226 void call() { 227 (*obj.*func)(_param1, _param2, _param3, _param4, _param5, _param6); 228 } 229 getID()230 const std::string& getID() 231 { 232 return obj->getID(); 233 } 234 235 private: 236 c *obj; 237 void (c::*func)(p1, p2, p3, p4, p5, p6); 238 p1 _param1; 239 p2 _param2; 240 p3 _param3; 241 p4 _param4; 242 p5 _param5; 243 p6 _param6; 244 }; 245 246 template<class c, typename p1, typename p2, typename p3, typename p4, typename p5, typename p6, typename p7> 247 class Func7: public FuncBase 248 { 249 public: Func7(c * obj,void (c::* func)(p1,p2,p3,p4,p5,p6,p7),p1 param1,p2 param2,p3 param3,p4 param4,p5 param5,p6 param6,p7 param7)250 Func7(c *obj, void (c::*func)(p1, p2, p3, p4, p5, p6, p7), 251 p1 param1, p2 param2, p3 param3, p4 param4, p5 param5, p6 param6, p7 param7): 252 _param1(param1), 253 _param2(param2), 254 _param3(param3), 255 _param4(param4), 256 _param5(param5), 257 _param6(param6), 258 _param7(param7) 259 { 260 this->obj = obj; 261 this->func = func; 262 } 263 call()264 void call() { 265 (*obj.*func)(_param1, _param2, _param3, _param4, _param5, _param6, _param7); 266 } 267 getID()268 const std::string& getID() 269 { 270 return obj->getID(); 271 } 272 273 private: 274 c *obj; 275 void (c::*func)(p1, p2, p3, p4, p5, p6, p7); 276 p1 _param1; 277 p2 _param2; 278 p3 _param3; 279 p4 _param4; 280 p5 _param5; 281 p6 _param6; 282 p7 _param7; 283 }; 284 285 template<class c, typename p1, typename p2, typename p3, typename p4, 286 typename p5, typename p6, typename p7, typename p8> 287 class Func8: public FuncBase 288 { 289 public: Func8(c * obj,void (c::* func)(p1,p2,p3,p4,p5,p6,p7,p8),p1 param1,p2 param2,p3 param3,p4 param4,p5 param5,p6 param6,p7 param7,p8 param8)290 Func8(c *obj, void (c::*func)(p1, p2, p3, p4, p5, p6, p7, p8), 291 p1 param1, p2 param2, p3 param3, p4 param4, p5 param5, p6 param6, 292 p7 param7, p8 param8): 293 _param1(param1), 294 _param2(param2), 295 _param3(param3), 296 _param4(param4), 297 _param5(param5), 298 _param6(param6), 299 _param7(param7), 300 _param8(param8) 301 { 302 this->obj = obj; 303 this->func = func; 304 } 305 call()306 void call() { 307 (*obj.*func)(_param1, _param2, _param3, _param4, _param5, _param6, 308 _param7, _param8); 309 } 310 getID()311 const std::string& getID() 312 { 313 return obj->getID(); 314 } 315 316 private: 317 c *obj; 318 void (c::*func)(p1, p2, p3, p4, p5, p6, p7, p8); 319 p1 _param1; 320 p2 _param2; 321 p3 _param3; 322 p4 _param4; 323 p5 _param5; 324 p6 _param6; 325 p7 _param7; 326 p8 _param8; 327 }; 328 329 template<class c, typename p1, typename p2, typename p3, typename p4, 330 typename p5, typename p6, typename p7, typename p8, typename p9> 331 class Func9: public FuncBase 332 { 333 public: Func9(c * obj,void (c::* func)(p1,p2,p3,p4,p5,p6,p7,p8,p9),p1 param1,p2 param2,p3 param3,p4 param4,p5 param5,p6 param6,p7 param7,p8 param8,p9 param9)334 Func9(c *obj, void (c::*func)(p1, p2, p3, p4, p5, p6, p7, p8, p9), 335 p1 param1, p2 param2, p3 param3, p4 param4, p5 param5, p6 param6, 336 p7 param7, p8 param8, p9 param9): 337 _param1(param1), 338 _param2(param2), 339 _param3(param3), 340 _param4(param4), 341 _param5(param5), 342 _param6(param6), 343 _param7(param7), 344 _param8(param8), 345 _param9(param9) 346 { 347 this->obj = obj; 348 this->func = func; 349 } 350 call()351 void call() { 352 (*obj.*func)(_param1, _param2, _param3, _param4, _param5, _param6, 353 _param7, _param8, _param9); 354 } 355 getID()356 const std::string& getID() 357 { 358 return obj->getID(); 359 } 360 361 private: 362 c *obj; 363 void (c::*func)(p1, p2, p3, p4, p5, p6, p7, p8, p9); 364 p1 _param1; 365 p2 _param2; 366 p3 _param3; 367 p4 _param4; 368 p5 _param5; 369 p6 _param6; 370 p7 _param7; 371 p8 _param8; 372 p9 _param9; 373 }; 374