00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef ARFUNCTOR_H
00028 #define ARFUNCTOR_H
00029
00030 #include "ariaTypedefs.h"
00031
00033
00106 class ArFunctor
00107 {
00108 public:
00109
00111 virtual ~ArFunctor() {}
00112
00114 virtual void invoke(void) = 0;
00115
00117 virtual const char *getName(void) { return myName.c_str(); }
00118
00120 virtual void setName(const char *name) { myName = name; }
00121 protected:
00122 std::string myName;
00123 };
00124
00126
00134 template<class P1>
00135 class ArFunctor1 : public ArFunctor
00136 {
00137 public:
00138
00140 virtual ~ArFunctor1() {}
00141
00143 virtual void invoke(void) = 0;
00144
00146
00149 virtual void invoke(P1 p1) = 0;
00150 };
00151
00153
00161 template<class P1, class P2>
00162 class ArFunctor2 : public ArFunctor1<P1>
00163 {
00164 public:
00165
00167 virtual ~ArFunctor2() {}
00168
00170 virtual void invoke(void) = 0;
00171
00173
00176 virtual void invoke(P1 p1) = 0;
00177
00179
00183 virtual void invoke(P1 p1, P2 p2) = 0;
00184 };
00185
00187
00195 template<class P1, class P2, class P3>
00196 class ArFunctor3 : public ArFunctor2<P1, P2>
00197 {
00198 public:
00199
00201 virtual ~ArFunctor3() {}
00202
00204 virtual void invoke(void) = 0;
00205
00207
00210 virtual void invoke(P1 p1) = 0;
00211
00213
00217 virtual void invoke(P1 p1, P2 p2) = 0;
00218
00220
00225 virtual void invoke(P1 p1, P2 p2, P3 p3) = 0;
00226 };
00227
00228
00229
00231
00239 template<class P1, class P2, class P3, class P4>
00240 class ArFunctor4 : public ArFunctor3<P1, P2, P3>
00241 {
00242 public:
00243
00245 virtual ~ArFunctor4() {}
00246
00248 virtual void invoke(void) = 0;
00249
00251
00254 virtual void invoke(P1 p1) = 0;
00255
00257
00261 virtual void invoke(P1 p1, P2 p2) = 0;
00262
00264
00269 virtual void invoke(P1 p1, P2 p2, P3 p3) = 0;
00270
00272
00278 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) = 0;
00279
00280 };
00281
00282
00283
00284
00286
00294 template<class Ret>
00295 class ArRetFunctor : public ArFunctor
00296 {
00297 public:
00298
00300 virtual ~ArRetFunctor() {}
00301
00303 virtual void invoke(void) {invokeR();}
00304
00306 virtual Ret invokeR(void) = 0;
00307 };
00308
00310
00319 template<class Ret, class P1>
00320 class ArRetFunctor1 : public ArRetFunctor<Ret>
00321 {
00322 public:
00323
00325 virtual ~ArRetFunctor1() {}
00326
00328 virtual Ret invokeR(void) = 0;
00329
00331
00334 virtual Ret invokeR(P1 p1) = 0;
00335 };
00336
00338
00347 template<class Ret, class P1, class P2>
00348 class ArRetFunctor2 : public ArRetFunctor1<Ret, P1>
00349 {
00350 public:
00351
00353 virtual ~ArRetFunctor2() {}
00354
00356 virtual Ret invokeR(void) = 0;
00357
00359
00362 virtual Ret invokeR(P1 p1) = 0;
00363
00365
00369 virtual Ret invokeR(P1 p1, P2 p2) = 0;
00370 };
00371
00373
00382 template<class Ret, class P1, class P2, class P3>
00383 class ArRetFunctor3 : public ArRetFunctor2<Ret, P1, P2>
00384 {
00385 public:
00386
00388 virtual ~ArRetFunctor3() {}
00389
00391 virtual Ret invokeR(void) = 0;
00392
00394
00397 virtual Ret invokeR(P1 p1) = 0;
00398
00400
00404 virtual Ret invokeR(P1 p1, P2 p2) = 0;
00405
00407
00412 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) = 0;
00413 };
00414
00415
00416
00417
00419
00428 template<class Ret, class P1, class P2, class P3, class P4>
00429 class ArRetFunctor4 : public ArRetFunctor3<Ret, P1, P2, P3>
00430 {
00431 public:
00432
00434 virtual ~ArRetFunctor4() {}
00435
00437 virtual Ret invokeR(void) = 0;
00438
00440
00443 virtual Ret invokeR(P1 p1) = 0;
00444
00446
00450 virtual Ret invokeR(P1 p1, P2 p2) = 0;
00451
00453
00458 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) = 0;
00459
00461
00467 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4) = 0;
00468 };
00469
00470
00471
00472
00473
00487
00488
00489 #ifndef SWIG
00490
00491
00499 class ArGlobalFunctor : public ArFunctor
00500 {
00501 public:
00502
00504 ArGlobalFunctor() {}
00506
00509 ArGlobalFunctor(void (*func)(void)) : myFunc(func) {}
00511 virtual ~ArGlobalFunctor() {}
00512
00514 virtual void invoke(void) {(*myFunc)();}
00515 protected:
00516
00517 void (*myFunc)(void);
00518 };
00519
00521
00529 template<class P1>
00530 class ArGlobalFunctor1 : public ArFunctor1<P1>
00531 {
00532 public:
00533
00535 ArGlobalFunctor1() {}
00537
00540 ArGlobalFunctor1(void (*func)(P1)) :
00541 myFunc(func), myP1() {}
00543
00547 ArGlobalFunctor1(void (*func)(P1), P1 p1) :
00548 myFunc(func), myP1(p1) {}
00549
00551 virtual ~ArGlobalFunctor1() {}
00552
00554 virtual void invoke(void) {(*myFunc)(myP1);}
00555
00557
00560 virtual void invoke(P1 p1) {(*myFunc)(p1);}
00561
00563
00566 virtual void setP1(P1 p1) {myP1=p1;}
00567
00568 protected:
00569
00570 void (*myFunc)(P1);
00571 P1 myP1;
00572 };
00573
00574
00576
00584 template<class P1, class P2>
00585 class ArGlobalFunctor2 : public ArFunctor2<P1, P2>
00586 {
00587 public:
00588
00590 ArGlobalFunctor2() {}
00591
00593
00596 ArGlobalFunctor2(void (*func)(P1, P2)) :
00597 myFunc(func), myP1(), myP2() {}
00598
00600
00604 ArGlobalFunctor2(void (*func)(P1, P2), P1 p1) :
00605 myFunc(func), myP1(p1), myP2() {}
00606
00608
00613 ArGlobalFunctor2(void (*func)(P1, P2), P1 p1, P2 p2) :
00614 myFunc(func), myP1(p1), myP2(p2) {}
00615
00617 virtual ~ArGlobalFunctor2() {}
00618
00620 virtual void invoke(void) {(*myFunc)(myP1, myP2);}
00621
00623
00626 virtual void invoke(P1 p1) {(*myFunc)(p1, myP2);}
00627
00629
00633 virtual void invoke(P1 p1, P2 p2) {(*myFunc)(p1, p2);}
00634
00636
00639 virtual void setP1(P1 p1) {myP1=p1;}
00640
00642
00645 virtual void setP2(P2 p2) {myP2=p2;}
00646
00647 protected:
00648
00649 void (*myFunc)(P1, P2);
00650 P1 myP1;
00651 P2 myP2;
00652 };
00653
00655
00663 template<class P1, class P2, class P3>
00664 class ArGlobalFunctor3 : public ArFunctor3<P1, P2, P3>
00665 {
00666 public:
00667
00669 ArGlobalFunctor3() {}
00670
00672
00675 ArGlobalFunctor3(void (*func)(P1, P2, P3)) :
00676 myFunc(func), myP1(), myP2(), myP3() {}
00677
00679
00683 ArGlobalFunctor3(void (*func)(P1, P2, P3), P1 p1) :
00684 myFunc(func), myP1(p1), myP2(), myP3() {}
00685
00687
00692 ArGlobalFunctor3(void (*func)(P1, P2, P3), P1 p1, P2 p2) :
00693 myFunc(func), myP1(p1), myP2(p2), myP3() {}
00694
00696
00702 ArGlobalFunctor3(void (*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
00703 myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
00704
00706 virtual ~ArGlobalFunctor3() {}
00707
00709 virtual void invoke(void) {(*myFunc)(myP1, myP2, myP3);}
00710
00712
00715 virtual void invoke(P1 p1) {(*myFunc)(p1, myP2, myP3);}
00716
00718
00722 virtual void invoke(P1 p1, P2 p2) {(*myFunc)(p1, p2, myP3);}
00723
00725
00730 virtual void invoke(P1 p1, P2 p2, P3 p3) {(*myFunc)(p1, p2, p3);}
00731
00733
00736 virtual void setP1(P1 p1) {myP1=p1;}
00737
00739
00742 virtual void setP2(P2 p2) {myP2=p2;}
00743
00745
00748 virtual void setP3(P3 p3) {myP3=p3;}
00749
00750 protected:
00751
00752 void (*myFunc)(P1, P2, P3);
00753 P1 myP1;
00754 P2 myP2;
00755 P3 myP3;
00756 };
00757
00758
00759
00760
00761
00763
00771 template<class P1, class P2, class P3, class P4>
00772 class ArGlobalFunctor4 : public ArFunctor4<P1, P2, P3, P4>
00773 {
00774 public:
00775
00777 ArGlobalFunctor4() {}
00778
00780
00783 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4)) :
00784 myFunc(func), myP1(), myP2(), myP3(), myP4() {}
00785
00787
00791 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1) :
00792 myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
00793
00795
00800 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
00801 myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
00802
00804
00810 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
00811 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
00812
00814
00821 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
00822 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
00823
00825 virtual ~ArGlobalFunctor4() {}
00826
00828 virtual void invoke(void) {(*myFunc)(myP1, myP2, myP3, myP4);}
00829
00831
00834 virtual void invoke(P1 p1) {(*myFunc)(p1, myP2, myP3, myP4);}
00835
00837
00841 virtual void invoke(P1 p1, P2 p2) {(*myFunc)(p1, p2, myP3, myP4);}
00842
00844
00849 virtual void invoke(P1 p1, P2 p2, P3 p3) {(*myFunc)(p1, p2, p3, myP4);}
00850
00852
00858 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) {(*myFunc)(p1, p2, p3, p4);}
00859
00861
00864 virtual void setP1(P1 p1) {myP1=p1;}
00865
00867
00870 virtual void setP2(P2 p2) {myP2=p2;}
00871
00873
00876 virtual void setP3(P3 p3) {myP3=p3;}
00877
00879
00882 virtual void setP4(P4 p4) {myP4=p4;}
00883
00884 protected:
00885
00886 void (*myFunc)(P1, P2, P3, P4);
00887 P1 myP1;
00888 P2 myP2;
00889 P3 myP3;
00890 P4 myP4;
00891 };
00892
00893
00894
00895
00910
00911
00913
00921 template<class Ret>
00922 class ArGlobalRetFunctor : public ArRetFunctor<Ret>
00923 {
00924 public:
00925
00927 ArGlobalRetFunctor() {}
00928
00930
00933 ArGlobalRetFunctor(Ret (*func)(void)) : myFunc(func) {}
00934
00936 virtual ~ArGlobalRetFunctor() {}
00937
00939 virtual Ret invokeR(void) {return (*myFunc)();}
00940
00941 protected:
00942
00943 Ret (*myFunc)(void);
00944 };
00945
00946
00948
00956 template<class Ret, class P1>
00957 class ArGlobalRetFunctor1 : public ArRetFunctor1<Ret, P1>
00958 {
00959 public:
00960
00962 ArGlobalRetFunctor1() {}
00963
00965
00968 ArGlobalRetFunctor1(Ret (*func)(P1)) :
00969 myFunc(func), myP1() {}
00970
00972
00976 ArGlobalRetFunctor1(Ret (*func)(P1), P1 p1) :
00977 myFunc(func), myP1(p1) {}
00978
00980 virtual ~ArGlobalRetFunctor1() {}
00981
00983 virtual Ret invokeR(void) {return (*myFunc)(myP1);}
00984
00986
00989 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1);}
00990
00992
00995 virtual void setP1(P1 p1) {myP1=p1;}
00996
00997 protected:
00998
00999 Ret (*myFunc)(P1);
01000 P1 myP1;
01001 };
01002
01004
01012 template<class Ret, class P1, class P2>
01013 class ArGlobalRetFunctor2 : public ArRetFunctor2<Ret, P1, P2>
01014 {
01015 public:
01016
01018 ArGlobalRetFunctor2() {}
01019
01021
01024 ArGlobalRetFunctor2(Ret (*func)(P1, P2)) :
01025 myFunc(func), myP1(), myP2() {}
01026
01028
01032 ArGlobalRetFunctor2(Ret (*func)(P1, P2), P1 p1) :
01033 myFunc(func), myP1(p1), myP2() {}
01034
01036
01040 ArGlobalRetFunctor2(Ret (*func)(P1, P2), P1 p1, P2 p2) :
01041 myFunc(func), myP1(p1), myP2(p2) {}
01042
01044 virtual ~ArGlobalRetFunctor2() {}
01045
01047 virtual Ret invokeR(void) {return (*myFunc)(myP1, myP2);}
01048
01050
01053 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1, myP2);}
01054
01056
01060 virtual Ret invokeR(P1 p1, P2 p2) {return (*myFunc)(p1, p2);}
01061
01063
01066 virtual void setP1(P1 p1) {myP1=p1;}
01067
01069
01072 virtual void setP2(P2 p2) {myP2=p2;}
01073
01074 protected:
01075
01076 Ret (*myFunc)(P1, P2);
01077 P1 myP1;
01078 P2 myP2;
01079 };
01080
01082
01090 template<class Ret, class P1, class P2, class P3>
01091 class ArGlobalRetFunctor3 : public ArRetFunctor3<Ret, P1, P2, P3>
01092 {
01093 public:
01094
01096 ArGlobalRetFunctor3() {}
01097
01099
01102 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3)) :
01103 myFunc(func), myP1(), myP2(), myP3() {}
01104
01106
01110 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3), P1 p1) :
01111 myFunc(func), myP1(p1), myP2(), myP3() {}
01112
01114
01119 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3), P1 p1, P2 p2) :
01120 myFunc(func), myP1(p1), myP2(p2), myP3() {}
01121
01123
01128 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
01129 myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
01130
01132 virtual ~ArGlobalRetFunctor3() {}
01133
01135 virtual Ret invokeR(void) {return (*myFunc)(myP1, myP2, myP3);}
01136
01138
01141 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1, myP2, myP3);}
01142
01144
01148 virtual Ret invokeR(P1 p1, P2 p2) {return (*myFunc)(p1, p2, myP3);}
01149
01151
01156 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) {return (*myFunc)(p1, p2, p3);}
01157
01159
01162 virtual void setP1(P1 p1) {myP1=p1;}
01163
01165
01168 virtual void setP2(P2 p2) {myP2=p2;}
01169
01171
01174 virtual void setP3(P3 p3) {myP3=p3;}
01175
01176
01177
01178 protected:
01179
01180 Ret (*myFunc)(P1, P2, P3);
01181 P1 myP1;
01182 P2 myP2;
01183 P3 myP3;
01184 };
01185
01186
01187
01189
01197 template<class Ret, class P1, class P2, class P3, class P4>
01198 class ArGlobalRetFunctor4 : public ArRetFunctor4<Ret, P1, P2, P3, P4>
01199 {
01200 public:
01201
01203 ArGlobalRetFunctor4() {}
01204
01206
01209 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3)) :
01210 myFunc(func), myP1(), myP2(), myP3() {}
01211
01213
01217 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3), P1 p1) :
01218 myFunc(func), myP1(p1), myP2(), myP3() {}
01219
01221
01226 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3), P1 p1, P2 p2) :
01227 myFunc(func), myP1(p1), myP2(p2), myP3() {}
01228
01230
01236 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
01237 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
01238
01240
01247 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
01248 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
01249
01251 virtual ~ArGlobalRetFunctor4() {}
01252
01254 virtual Ret invokeR(void) {return (*myFunc)(myP1, myP2, myP3, myP4);}
01255
01257
01260 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1, myP2, myP3, myP4);}
01261
01263
01267 virtual Ret invokeR(P1 p1, P2 p2) {return (*myFunc)(p1, p2, myP3, myP4);}
01268
01270
01275 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) {return (*myFunc)(p1, p2, p3, myP4);}
01276
01278
01284 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4) {return (*myFunc)(p1, p2, p3, p4);}
01285
01287
01290 virtual void setP1(P1 p1) {myP1=p1;}
01291
01293
01296 virtual void setP2(P2 p2) {myP2=p2;}
01297
01299
01302 virtual void setP3(P3 p3) {myP3=p3;}
01303
01304
01306
01309 virtual void setP4(P4 p4) {myP4=p4;}
01310
01311 protected:
01312
01313 Ret (*myFunc)(P1, P2, P3, P4);
01314 P1 myP1;
01315 P2 myP2;
01316 P3 myP3;
01317 P4 myP4;
01318 };
01319
01320
01321
01322
01323
01324
01325 #endif // SWIG
01326
01340
01341
01343
01351 template<class T>
01352 class ArFunctorC : public ArFunctor
01353 {
01354 public:
01355
01357 ArFunctorC() {}
01358
01360
01363 ArFunctorC(T &obj, void (T::*func)(void)) : myObj(&obj), myFunc(func) {}
01364
01366
01369 ArFunctorC(T *obj, void (T::*func)(void)) : myObj(obj), myFunc(func) {}
01370
01372 virtual ~ArFunctorC() {}
01373
01375 virtual void invoke(void) {(myObj->*myFunc)();}
01376
01378
01381 virtual void setThis(T *obj) {myObj=obj;}
01382
01384
01387 virtual void setThis(T &obj) {myObj=&obj;}
01388
01389 protected:
01390
01391 T *myObj;
01392 void (T::*myFunc)(void);
01393 };
01394
01395
01397
01405 template<class T, class P1>
01406 class ArFunctor1C : public ArFunctor1<P1>
01407 {
01408 public:
01409
01411 ArFunctor1C() {}
01412
01414
01417 ArFunctor1C(T &obj, void (T::*func)(P1)) :
01418 myObj(&obj), myFunc(func), myP1() {}
01419
01421
01425 ArFunctor1C(T &obj, void (T::*func)(P1), P1 p1) :
01426 myObj(&obj), myFunc(func), myP1(p1) {}
01427
01429
01432 ArFunctor1C(T *obj, void (T::*func)(P1)) :
01433 myObj(obj), myFunc(func), myP1() {}
01434
01436
01440 ArFunctor1C(T *obj, void (T::*func)(P1), P1 p1) :
01441 myObj(obj), myFunc(func), myP1(p1) {}
01442
01444 virtual ~ArFunctor1C() {}
01445
01447 virtual void invoke(void) {(myObj->*myFunc)(myP1);}
01448
01450
01453 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1);}
01454
01456
01459 virtual void setThis(T *obj) {myObj=obj;}
01460
01462
01465 virtual void setThis(T &obj) {myObj=&obj;}
01466
01468
01471 virtual void setP1(P1 p1) {myP1=p1;}
01472
01473 protected:
01474
01475 T *myObj;
01476 void (T::*myFunc)(P1);
01477 P1 myP1;
01478 };
01479
01480
01482
01490 template<class T, class P1, class P2>
01491 class ArFunctor2C : public ArFunctor2<P1, P2>
01492 {
01493 public:
01494
01496 ArFunctor2C() {}
01497
01499
01502 ArFunctor2C(T &obj, void (T::*func)(P1, P2)) :
01503 myObj(&obj), myFunc(func), myP1(), myP2() {}
01504
01506
01510 ArFunctor2C(T &obj, void (T::*func)(P1, P2), P1 p1) :
01511 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
01512
01514
01519 ArFunctor2C(T &obj, void (T::*func)(P1, P2), P1 p1, P2 p2) :
01520 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
01521
01523
01526 ArFunctor2C(T *obj, void (T::*func)(P1, P2)) :
01527 myObj(obj), myFunc(func), myP1(), myP2() {}
01528
01530
01534 ArFunctor2C(T *obj, void (T::*func)(P1, P2), P1 p1) :
01535 myObj(obj), myFunc(func), myP1(p1), myP2() {}
01536
01538
01543 ArFunctor2C(T *obj, void (T::*func)(P1, P2), P1 p1, P2 p2) :
01544 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
01545
01547 virtual ~ArFunctor2C() {}
01548
01550 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2);}
01551
01553
01556 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2);}
01557
01559
01563 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2);}
01564
01566
01569 virtual void setThis(T *obj) {myObj=obj;}
01570
01572
01575 virtual void setThis(T &obj) {myObj=&obj;}
01576
01578
01581 virtual void setP1(P1 p1) {myP1=p1;}
01582
01584
01587 virtual void setP2(P2 p2) {myP2=p2;}
01588
01589 protected:
01590
01591 T *myObj;
01592 void (T::*myFunc)(P1, P2);
01593 P1 myP1;
01594 P2 myP2;
01595 };
01596
01598
01606 template<class T, class P1, class P2, class P3>
01607 class ArFunctor3C : public ArFunctor3<P1, P2, P3>
01608 {
01609 public:
01610
01612 ArFunctor3C() {}
01613
01615
01618 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3)) :
01619 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
01620
01622
01626 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3), P1 p1) :
01627 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
01628
01630
01635 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
01636 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
01637
01639
01645 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
01646 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
01647
01649
01652 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3)) :
01653 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
01654
01656
01660 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3), P1 p1) :
01661 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
01662
01664
01669 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
01670 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
01671
01673
01679 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
01680 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
01681
01683 virtual ~ArFunctor3C() {}
01684
01686 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3);}
01687
01689
01692 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3);}
01693
01695
01699 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3);}
01700
01702
01707 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3);}
01708
01710
01713 virtual void setThis(T *obj) {myObj=obj;}
01714
01716
01719 virtual void setThis(T &obj) {myObj=&obj;}
01720
01722
01725 virtual void setP1(P1 p1) {myP1=p1;}
01726
01728
01731 virtual void setP2(P2 p2) {myP2=p2;}
01732
01734
01737 virtual void setP3(P3 p3) {myP3=p3;}
01738
01739 protected:
01740
01741 T *myObj;
01742 void (T::*myFunc)(P1, P2, P3);
01743 P1 myP1;
01744 P2 myP2;
01745 P3 myP3;
01746 };
01747
01748
01749
01751
01759 template<class T, class P1, class P2, class P3, class P4>
01760 class ArFunctor4C : public ArFunctor4<P1, P2, P3, P4>
01761 {
01762 public:
01763
01765 ArFunctor4C() {}
01766
01768
01771 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4)) :
01772 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
01773
01775
01779 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
01780 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
01781
01783
01788 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
01789 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
01790
01792
01798 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
01799 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
01800
01802
01809 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
01810 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
01811
01813
01816 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4)) :
01817 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
01818
01820
01824 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
01825 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
01826
01828
01833 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
01834 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
01835
01837
01843 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
01844 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
01845
01847
01854 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
01855 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
01856
01857
01859 virtual ~ArFunctor4C() {}
01860
01862 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3, myP4);}
01863
01865
01868 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3, myP4);}
01869
01871
01875 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3, myP4);}
01876
01878
01883 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3, myP4);}
01884
01886
01892 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) {(myObj->*myFunc)(p1, p2, p3, p4);}
01893
01895
01898 virtual void setThis(T *obj) {myObj=obj;}
01899
01901
01904 virtual void setThis(T &obj) {myObj=&obj;}
01905
01907
01910 virtual void setP1(P1 p1) {myP1=p1;}
01911
01913
01916 virtual void setP2(P2 p2) {myP2=p2;}
01917
01919
01922 virtual void setP3(P3 p3) {myP3=p3;}
01923
01925
01928 virtual void setP4(P4 p4) {myP4=p4;}
01929
01930
01931 protected:
01932
01933 T *myObj;
01934 void (T::*myFunc)(P1, P2, P3, P4);
01935 P1 myP1;
01936 P2 myP2;
01937 P3 myP3;
01938 P4 myP4;
01939 };
01940
01941
01942
01943
01944
01945
01959
01960
01962
01970 template<class Ret, class T>
01971 class ArRetFunctorC : public ArRetFunctor<Ret>
01972 {
01973 public:
01974
01976 ArRetFunctorC() {}
01977
01979
01982 ArRetFunctorC(T &obj, Ret (T::*func)(void)) : myObj(&obj), myFunc(func) {}
01983
01985
01988 ArRetFunctorC(T *obj, Ret (T::*func)(void)) : myObj(obj), myFunc(func) {}
01989
01991 virtual ~ArRetFunctorC() {}
01992
01994 virtual Ret invokeR(void) {return (myObj->*myFunc)();}
01995
01997
02000 virtual void setThis(T *obj) {myObj=obj;}
02001
02003
02006 virtual void setThis(T &obj) {myObj=&obj;}
02007
02008 protected:
02009
02010 T *myObj;
02011 Ret (T::*myFunc)(void);
02012 };
02013
02015
02024 template<class Ret, class T, class P1>
02025 class ArRetFunctor1C : public ArRetFunctor1<Ret, P1>
02026 {
02027 public:
02028
02030 ArRetFunctor1C() {}
02031
02033
02036 ArRetFunctor1C(T &obj, Ret (T::*func)(P1)) :
02037 myObj(&obj), myFunc(func), myP1() {}
02038
02040
02044 ArRetFunctor1C(T &obj, Ret (T::*func)(P1), P1 p1) :
02045 myObj(&obj), myFunc(func), myP1(p1) {}
02046
02048
02051 ArRetFunctor1C(T *obj, Ret (T::*func)(P1)) :
02052 myObj(obj), myFunc(func), myP1() {}
02053
02055
02059 ArRetFunctor1C(T *obj, Ret (T::*func)(P1), P1 p1) :
02060 myObj(obj), myFunc(func), myP1(p1) {}
02061
02063 virtual ~ArRetFunctor1C() {}
02064
02066 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1);}
02067
02069
02072 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1);}
02073
02075
02078 virtual void setThis(T *obj) {myObj=obj;}
02079
02081
02084 virtual void setThis(T &obj) {myObj=&obj;}
02085
02087
02090 virtual void setP1(P1 p1) {myP1=p1;}
02091
02092 protected:
02093
02094 T *myObj;
02095 Ret (T::*myFunc)(P1);
02096 P1 myP1;
02097 };
02098
02100
02109 template<class Ret, class T, class P1, class P2>
02110 class ArRetFunctor2C : public ArRetFunctor2<Ret, P1, P2>
02111 {
02112 public:
02113
02115 ArRetFunctor2C() {}
02116
02118
02121 ArRetFunctor2C(T &obj, Ret (T::*func)(P1, P2)) :
02122 myObj(&obj), myFunc(func), myP1(), myP2() {}
02123
02125
02129 ArRetFunctor2C(T &obj, Ret (T::*func)(P1, P2), P1 p1) :
02130 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
02131
02133
02138 ArRetFunctor2C(T &obj, Ret (T::*func)(P1, P2), P1 p1, P2 p2) :
02139 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
02140
02142
02145 ArRetFunctor2C(T *obj, Ret (T::*func)(P1, P2)) :
02146 myObj(obj), myFunc(func), myP1(), myP2() {}
02147
02149
02153 ArRetFunctor2C(T *obj, Ret (T::*func)(P1, P2), P1 p1) :
02154 myObj(obj), myFunc(func), myP1(p1), myP2() {}
02155
02157
02162 ArRetFunctor2C(T *obj, Ret (T::*func)(P1, P2), P1 p1, P2 p2) :
02163 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
02164
02166 virtual ~ArRetFunctor2C() {}
02167
02169 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2);}
02170
02172
02175 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2);}
02176
02178
02182 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2);}
02183
02185
02188 virtual void setThis(T *obj) {myObj=obj;}
02189
02191
02194 virtual void setThis(T &obj) {myObj=&obj;}
02195
02197
02200 virtual void setP1(P1 p1) {myP1=p1;}
02201
02203
02206 virtual void setP2(P2 p2) {myP2=p2;}
02207
02208 protected:
02209
02210 T *myObj;
02211 Ret (T::*myFunc)(P1, P2);
02212 P1 myP1;
02213 P2 myP2;
02214 };
02215
02217
02226 template<class Ret, class T, class P1, class P2, class P3>
02227 class ArRetFunctor3C : public ArRetFunctor3<Ret, P1, P2, P3>
02228 {
02229 public:
02230
02232 ArRetFunctor3C() {}
02233
02235
02238 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3)) :
02239 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
02240
02242
02246 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3), P1 p1) :
02247 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02248
02250
02255 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
02256 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02257
02259
02264 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
02265 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02266
02268
02271 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3)) :
02272 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
02273
02275
02279 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3), P1 p1) :
02280 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02281
02283
02288 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
02289 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02290
02292
02298 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
02299 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02300
02302 virtual ~ArRetFunctor3C() {}
02303
02305 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3);}
02306
02308
02311 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3);}
02312
02314
02318 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3);}
02319
02321
02325 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
02326 {return (myObj->*myFunc)(p1, p2, p3);}
02327
02329
02332 virtual void setThis(T *obj) {myObj=obj;}
02333
02335
02338 virtual void setThis(T &obj) {myObj=&obj;}
02339
02341
02344 virtual void setP1(P1 p1) {myP1=p1;}
02345
02347
02350 virtual void setP2(P2 p2) {myP2=p2;}
02351
02353
02356 virtual void setP3(P3 p3) {myP3=p3;}
02357
02358 protected:
02359
02360 T *myObj;
02361 Ret (T::*myFunc)(P1, P2, P3);
02362 P1 myP1;
02363 P2 myP2;
02364 P3 myP3;
02365 };
02366
02367
02368
02369
02370
02371
02372
02374
02383 template<class Ret, class T, class P1, class P2, class P3, class P4>
02384 class ArRetFunctor4C : public ArRetFunctor4<Ret, P1, P2, P3, P4>
02385 {
02386 public:
02387
02389 ArRetFunctor4C() {}
02390
02392
02395 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4)) :
02396 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
02397
02399
02403 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1) :
02404 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
02405
02407
02412 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
02413 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
02414
02416
02422 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
02423 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
02424
02426
02433 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
02434 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
02435
02436
02437
02439
02442 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4)) :
02443 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
02444
02446
02450 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1) :
02451 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
02452
02454
02459 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
02460 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
02461
02463
02469 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
02470 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
02471
02473
02480 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
02481 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
02482
02484 virtual ~ArRetFunctor4C() {}
02485
02487 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3, myP4);}
02488
02490
02493 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3, myP4);}
02494
02496
02500 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3, myP4);}
02501
02503
02507 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
02508 {return (myObj->*myFunc)(p1, p2, p3, myP4);}
02509
02511
02517 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4)
02518 {return (myObj->*myFunc)(p1, p2, p3, p4);}
02519
02520
02522
02525 virtual void setThis(T *obj) {myObj=obj;}
02526
02528
02531 virtual void setThis(T &obj) {myObj=&obj;}
02532
02534
02537 virtual void setP1(P1 p1) {myP1=p1;}
02538
02540
02543 virtual void setP2(P2 p2) {myP2=p2;}
02544
02546
02549 virtual void setP3(P3 p3) {myP3=p3;}
02550
02552
02555 virtual void setP4(P4 p4) {myP4=p4;}
02556
02557 protected:
02558
02559 T *myObj;
02560 Ret (T::*myFunc)(P1, P2, P3, P4);
02561 P1 myP1;
02562 P2 myP2;
02563 P3 myP3;
02564 P4 myP4;
02565 };
02566
02567
02569 #ifndef SWIG
02583
02584
02586
02593 template<class T>
02594 class ArConstFunctorC : public ArFunctor
02595 {
02596 public:
02597
02599 ArConstFunctorC() {}
02600
02602
02605 ArConstFunctorC(T &obj, void (T::*func)(void) const) : myObj(&obj), myFunc(func) {}
02606
02608
02611 ArConstFunctorC(T *obj, void (T::*func)(void) const) : myObj(obj), myFunc(func) {}
02612
02614 virtual ~ArConstFunctorC() {}
02615
02617 virtual void invoke(void) {(myObj->*myFunc)();}
02618
02620
02623 virtual void setThis(T *obj) {myObj=obj;}
02624
02626
02629 virtual void setThis(T &obj) {myObj=&obj;}
02630
02631 protected:
02632
02633 T *myObj;
02634 void (T::*myFunc)(void) const;
02635 };
02636
02637
02639
02647 template<class T, class P1>
02648 class ArConstFunctor1C : public ArFunctor1<P1>
02649 {
02650 public:
02651
02653 ArConstFunctor1C() {}
02654
02656
02659 ArConstFunctor1C(T &obj, void (T::*func)(P1) const) :
02660 myObj(&obj), myFunc(func), myP1() {}
02661
02663
02667 ArConstFunctor1C(T &obj, void (T::*func)(P1) const, P1 p1) :
02668 myObj(&obj), myFunc(func), myP1(p1) {}
02669
02671
02674 ArConstFunctor1C(T *obj, void (T::*func)(P1) const) :
02675 myObj(obj), myFunc(func), myP1() {}
02676
02678
02682 ArConstFunctor1C(T *obj, void (T::*func)(P1) const, P1 p1) :
02683 myObj(obj), myFunc(func), myP1(p1) {}
02684
02686 virtual ~ArConstFunctor1C() {}
02687
02689 virtual void invoke(void) {(myObj->*myFunc)(myP1);}
02690
02692
02695 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1);}
02696
02698
02701 virtual void setThis(T *obj) {myObj=obj;}
02702
02704
02707 virtual void setThis(T &obj) {myObj=&obj;}
02708
02710
02713 virtual void setP1(P1 p1) {myP1=p1;}
02714
02715 protected:
02716
02717 T *myObj;
02718 void (T::*myFunc)(P1) const;
02719 P1 myP1;
02720 };
02721
02722
02724
02732 template<class T, class P1, class P2>
02733 class ArConstFunctor2C : public ArFunctor2<P1, P2>
02734 {
02735 public:
02736
02738 ArConstFunctor2C() {}
02739
02741
02744 ArConstFunctor2C(T &obj, void (T::*func)(P1, P2) const) :
02745 myObj(&obj), myFunc(func), myP1(), myP2() {}
02746
02748
02752 ArConstFunctor2C(T &obj, void (T::*func)(P1, P2) const, P1 p1) :
02753 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
02754
02756
02761 ArConstFunctor2C(T &obj, void (T::*func)(P1, P2) const, P1 p1, P2 p2) :
02762 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
02763
02765
02768 ArConstFunctor2C(T *obj, void (T::*func)(P1, P2) const) :
02769 myObj(obj), myFunc(func), myP1(), myP2() {}
02770
02772
02776 ArConstFunctor2C(T *obj, void (T::*func)(P1, P2) const, P1 p1) :
02777 myObj(obj), myFunc(func), myP1(p1), myP2() {}
02778
02780
02785 ArConstFunctor2C(T *obj, void (T::*func)(P1, P2) const, P1 p1, P2 p2) :
02786 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
02787
02789 virtual ~ArConstFunctor2C() {}
02790
02792 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2);}
02793
02795
02798 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2);}
02799
02801
02805 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2);}
02806
02808
02811 virtual void setThis(T *obj) {myObj=obj;}
02812
02814
02817 virtual void setThis(T &obj) {myObj=&obj;}
02818
02820
02823 virtual void setP1(P1 p1) {myP1=p1;}
02824
02826
02829 virtual void setP2(P2 p2) {myP2=p2;}
02830
02831 protected:
02832
02833 T *myObj;
02834 void (T::*myFunc)(P1, P2) const;
02835 P1 myP1;
02836 P2 myP2;
02837 };
02838
02840
02848 template<class T, class P1, class P2, class P3>
02849 class ArConstFunctor3C : public ArFunctor3<P1, P2, P3>
02850 {
02851 public:
02852
02854 ArConstFunctor3C() {}
02855
02857
02860 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const) :
02861 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
02862
02864
02868 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const, P1 p1) :
02869 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02870
02872
02877 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
02878 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02879
02881
02887 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
02888 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02889
02891
02894 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const) :
02895 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
02896
02898
02902 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const, P1 p1) :
02903 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02904
02906
02911 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
02912 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02913
02915
02921 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
02922 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02923
02925 virtual ~ArConstFunctor3C() {}
02926
02928 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3);}
02929
02931
02934 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3);}
02935
02937
02941 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3);}
02942
02944
02949 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3);}
02950
02952
02955 virtual void setThis(T *obj) {myObj=obj;}
02956
02958
02961 virtual void setThis(T &obj) {myObj=&obj;}
02962
02964
02967 virtual void setP1(P1 p1) {myP1=p1;}
02968
02970
02973 virtual void setP2(P2 p2) {myP2=p2;}
02974
02976
02979 virtual void setP3(P3 p3) {myP3=p3;}
02980
02981 protected:
02982
02983 T *myObj;
02984 void (T::*myFunc)(P1, P2, P3) const;
02985 P1 myP1;
02986 P2 myP2;
02987 P3 myP3;
02988 };
02989
02990
02991
02993
03001 template<class T, class P1, class P2, class P3, class P4>
03002 class ArConstFunctor4C : public ArFunctor4<P1, P2, P3, P4>
03003 {
03004 public:
03005
03007 ArConstFunctor4C() {}
03008
03010
03013 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4) const) :
03014 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03015
03017
03021 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
03022 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03023
03025
03030 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
03031 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03032
03034
03040 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
03041 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03042
03044
03051 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
03052 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03053
03055
03058 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4) const) :
03059 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03060
03062
03066 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
03067 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03068
03070
03075 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
03076 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03077
03079
03085 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
03086 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03087
03089
03096 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
03097 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03098
03099
03101 virtual ~ArConstFunctor4C() {}
03102
03104 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3, myP4);}
03105
03107
03110 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3, myP4);}
03111
03113
03117 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3, myP4);}
03118
03120
03125 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3, myP4);}
03126
03128
03134 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) {(myObj->*myFunc)(p1, p2, p3, p4);}
03135
03137
03140 virtual void setThis(T *obj) {myObj=obj;}
03141
03143
03146 virtual void setThis(T &obj) {myObj=&obj;}
03147
03149
03152 virtual void setP1(P1 p1) {myP1=p1;}
03153
03155
03158 virtual void setP2(P2 p2) {myP2=p2;}
03159
03161
03164 virtual void setP3(P3 p3) {myP3=p3;}
03165
03167
03170 virtual void setP4(P4 p4) {myP4=p4;}
03171
03172
03173 protected:
03174
03175 T *myObj;
03176 void (T::*myFunc)(P1, P2, P3, P4) const;
03177 P1 myP1;
03178 P2 myP2;
03179 P3 myP3;
03180 P4 myP4;
03181 };
03182
03183
03184
03185
03186
03187
03201
03202
03204
03212 template<class Ret, class T>
03213 class ArConstRetFunctorC : public ArRetFunctor<Ret>
03214 {
03215 public:
03216
03218 ArConstRetFunctorC() {}
03219
03221
03224 ArConstRetFunctorC(T &obj, Ret (T::*func)(void) const) : myObj(&obj), myFunc(func) {}
03225
03227
03230 ArConstRetFunctorC(T *obj, Ret (T::*func)(void) const) : myObj(obj), myFunc(func) {}
03231
03233 virtual ~ArConstRetFunctorC() {}
03234
03236 virtual Ret invokeR(void) {return (myObj->*myFunc)();}
03237
03239
03242 virtual void setThis(T *obj) {myObj=obj;}
03243
03245
03248 virtual void setThis(T &obj) {myObj=&obj;}
03249
03250 protected:
03251
03252 T *myObj;
03253 Ret (T::*myFunc)(void) const;
03254 };
03255
03257
03265 template<class Ret, class T, class P1>
03266 class ArConstRetFunctor1C : public ArRetFunctor1<Ret, P1>
03267 {
03268 public:
03269
03271 ArConstRetFunctor1C() {}
03272
03274
03277 ArConstRetFunctor1C(T &obj, Ret (T::*func)(P1) const) :
03278 myObj(&obj), myFunc(func), myP1() {}
03279
03281
03285 ArConstRetFunctor1C(T &obj, Ret (T::*func)(P1) const, P1 p1) :
03286 myObj(&obj), myFunc(func), myP1(p1) {}
03287
03289
03292 ArConstRetFunctor1C(T *obj, Ret (T::*func)(P1) const) :
03293 myObj(obj), myFunc(func), myP1() {}
03294
03296
03300 ArConstRetFunctor1C(T *obj, Ret (T::*func)(P1) const, P1 p1) :
03301 myObj(obj), myFunc(func), myP1(p1) {}
03302
03304 virtual ~ArConstRetFunctor1C() {}
03305
03307 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1);}
03308
03310
03313 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1);}
03314
03316
03319 virtual void setThis(T *obj) {myObj=obj;}
03320
03322
03325 virtual void setThis(T &obj) {myObj=&obj;}
03326
03328
03331 virtual void setP1(P1 p1) {myP1=p1;}
03332
03333 protected:
03334
03335 T *myObj;
03336 Ret (T::*myFunc)(P1) const;
03337 P1 myP1;
03338 };
03339
03341
03349 template<class Ret, class T, class P1, class P2>
03350 class ArConstRetFunctor2C : public ArRetFunctor2<Ret, P1, P2>
03351 {
03352 public:
03353
03355 ArConstRetFunctor2C() {}
03356
03358
03361 ArConstRetFunctor2C(T &obj, Ret (T::*func)(P1, P2) const) :
03362 myObj(&obj), myFunc(func), myP1(), myP2() {}
03363
03365
03369 ArConstRetFunctor2C(T &obj, Ret (T::*func)(P1, P2) const, P1 p1) :
03370 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
03371
03373
03378 ArConstRetFunctor2C(T &obj, Ret (T::*func)(P1, P2) const, P1 p1, P2 p2) :
03379 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
03380
03382
03385 ArConstRetFunctor2C(T *obj, Ret (T::*func)(P1, P2) const) :
03386 myObj(obj), myFunc(func), myP1(), myP2() {}
03387
03389
03393 ArConstRetFunctor2C(T *obj, Ret (T::*func)(P1, P2) const, P1 p1) :
03394 myObj(obj), myFunc(func), myP1(p1), myP2() {}
03395
03397
03402 ArConstRetFunctor2C(T *obj, Ret (T::*func)(P1, P2) const, P1 p1, P2 p2) :
03403 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
03404
03406 virtual ~ArConstRetFunctor2C() {}
03407
03409 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2);}
03410
03412
03415 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2);}
03416
03418
03422 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2);}
03423
03425
03428 virtual void setThis(T *obj) {myObj=obj;}
03429
03431
03434 virtual void setThis(T &obj) {myObj=&obj;}
03435
03437
03440 virtual void setP1(P1 p1) {myP1=p1;}
03441
03443
03446 virtual void setP2(P2 p2) {myP2=p2;}
03447
03448 protected:
03449
03450 T *myObj;
03451 Ret (T::*myFunc)(P1, P2) const;
03452 P1 myP1;
03453 P2 myP2;
03454 };
03455
03457
03465 template<class Ret, class T, class P1, class P2, class P3>
03466 class ArConstRetFunctor3C : public ArRetFunctor3<Ret, P1, P2, P3>
03467 {
03468 public:
03469
03471 ArConstRetFunctor3C() {}
03472
03474
03477 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const) :
03478 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
03479
03481
03485 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const, P1 p1) :
03486 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
03487
03489
03494 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
03495 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
03496
03498
03503 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
03504 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
03505
03507
03510 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const) :
03511 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
03512
03514
03518 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const, P1 p1) :
03519 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
03520
03522
03527 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
03528 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
03529
03531
03537 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
03538 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
03539
03541 virtual ~ArConstRetFunctor3C() {}
03542
03544 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3);}
03545
03547
03550 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3);}
03551
03553
03557 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3);}
03558
03560
03564 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
03565 {return (myObj->*myFunc)(p1, p2, p3);}
03566
03568
03571 virtual void setThis(T *obj) {myObj=obj;}
03572
03574
03577 virtual void setThis(T &obj) {myObj=&obj;}
03578
03580
03583 virtual void setP1(P1 p1) {myP1=p1;}
03584
03586
03589 virtual void setP2(P2 p2) {myP2=p2;}
03590
03592
03595 virtual void setP3(P3 p3) {myP3=p3;}
03596
03597 protected:
03598
03599 T *myObj;
03600 Ret (T::*myFunc)(P1, P2, P3) const;
03601 P1 myP1;
03602 P2 myP2;
03603 P3 myP3;
03604 };
03605
03606
03607
03608
03609
03610
03611
03613
03621 template<class Ret, class T, class P1, class P2, class P3, class P4>
03622 class ArConstRetFunctor4C : public ArRetFunctor4<Ret, P1, P2, P3, P4>
03623 {
03624 public:
03625
03627 ArConstRetFunctor4C() {}
03628
03630
03633 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const) :
03634 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03635
03637
03641 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1) :
03642 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03643
03645
03650 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2) :
03651 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03652
03654
03660 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3) :
03661 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03662
03664
03671 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3, P4 p4) :
03672 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03673
03674
03675
03677
03680 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const) :
03681 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03682
03684
03688 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1) :
03689 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03690
03692
03697 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2) :
03698 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03699
03701
03707 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3) :
03708 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03709
03711
03718 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3, P4 p4) :
03719 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03720
03722 virtual ~ArConstRetFunctor4C() {}
03723
03725 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3, myP4);}
03726
03728
03731 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3, myP4);}
03732
03734
03738 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3, myP4);}
03739
03741
03745 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
03746 {return (myObj->*myFunc)(p1, p2, p3, myP4);}
03747
03749
03755 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4)
03756 {return (myObj->*myFunc)(p1, p2, p3, p4);}
03757
03758
03760
03763 virtual void setThis(T *obj) {myObj=obj;}
03764
03766
03769 virtual void setThis(T &obj) {myObj=&obj;}
03770
03772
03775 virtual void setP1(P1 p1) {myP1=p1;}
03776
03778
03781 virtual void setP2(P2 p2) {myP2=p2;}
03782
03784
03787 virtual void setP3(P3 p3) {myP3=p3;}
03788
03790
03793 virtual void setP4(P4 p4) {myP4=p4;}
03794
03795 protected:
03796
03797 T *myObj;
03798 Ret (T::*myFunc)(P1, P2, P3, P4) const;
03799 P1 myP1;
03800 P2 myP2;
03801 P3 myP3;
03802 P4 myP4;
03803 };
03804
03805
03806 #endif
03807
03808
03809 #endif // ARFUNCTOR_H