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 #ifndef ARFUNCTOR_H
00027 #define ARFUNCTOR_H
00028
00029 #include "ariaTypedefs.h"
00030
00032
00103 class ArFunctor
00104 {
00105 public:
00106
00108 virtual ~ArFunctor() {}
00109
00111 virtual void invoke(void) = 0;
00112
00114 virtual const char *getName(void) { return myName.c_str(); }
00115
00117 virtual void setName(const char *name) { myName = name; }
00118 protected:
00119 std::string myName;
00120 };
00121
00123
00131 template<class P1>
00132 class ArFunctor1 : public ArFunctor
00133 {
00134 public:
00135
00137 virtual ~ArFunctor1() {}
00138
00140 virtual void invoke(void) = 0;
00141
00143
00146 virtual void invoke(P1 p1) = 0;
00147 };
00148
00150
00158 template<class P1, class P2>
00159 class ArFunctor2 : public ArFunctor1<P1>
00160 {
00161 public:
00162
00164 virtual ~ArFunctor2() {}
00165
00167 virtual void invoke(void) = 0;
00168
00170
00173 virtual void invoke(P1 p1) = 0;
00174
00176
00180 virtual void invoke(P1 p1, P2 p2) = 0;
00181 };
00182
00184
00192 template<class P1, class P2, class P3>
00193 class ArFunctor3 : public ArFunctor2<P1, P2>
00194 {
00195 public:
00196
00198 virtual ~ArFunctor3() {}
00199
00201 virtual void invoke(void) = 0;
00202
00204
00207 virtual void invoke(P1 p1) = 0;
00208
00210
00214 virtual void invoke(P1 p1, P2 p2) = 0;
00215
00217
00222 virtual void invoke(P1 p1, P2 p2, P3 p3) = 0;
00223 };
00224
00225
00226
00228
00236 template<class P1, class P2, class P3, class P4>
00237 class ArFunctor4 : public ArFunctor3<P1, P2, P3>
00238 {
00239 public:
00240
00242 virtual ~ArFunctor4() {}
00243
00245 virtual void invoke(void) = 0;
00246
00248
00251 virtual void invoke(P1 p1) = 0;
00252
00254
00258 virtual void invoke(P1 p1, P2 p2) = 0;
00259
00261
00266 virtual void invoke(P1 p1, P2 p2, P3 p3) = 0;
00267
00269
00275 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) = 0;
00276
00277 };
00278
00279
00280
00281
00283
00295 template<class Ret>
00296 class ArRetFunctor : public ArFunctor
00297 {
00298 public:
00299
00301 virtual ~ArRetFunctor() {}
00302
00304 virtual void invoke(void) {invokeR();}
00305
00307 virtual Ret invokeR(void) = 0;
00308 };
00309
00311
00320 template<class Ret, class P1>
00321 class ArRetFunctor1 : public ArRetFunctor<Ret>
00322 {
00323 public:
00324
00326 virtual ~ArRetFunctor1() {}
00327
00329 virtual Ret invokeR(void) = 0;
00330
00332
00335 virtual Ret invokeR(P1 p1) = 0;
00336 };
00337
00339
00348 template<class Ret, class P1, class P2>
00349 class ArRetFunctor2 : public ArRetFunctor1<Ret, P1>
00350 {
00351 public:
00352
00354 virtual ~ArRetFunctor2() {}
00355
00357 virtual Ret invokeR(void) = 0;
00358
00360
00363 virtual Ret invokeR(P1 p1) = 0;
00364
00366
00370 virtual Ret invokeR(P1 p1, P2 p2) = 0;
00371 };
00372
00374
00383 template<class Ret, class P1, class P2, class P3>
00384 class ArRetFunctor3 : public ArRetFunctor2<Ret, P1, P2>
00385 {
00386 public:
00387
00389 virtual ~ArRetFunctor3() {}
00390
00392 virtual Ret invokeR(void) = 0;
00393
00395
00398 virtual Ret invokeR(P1 p1) = 0;
00399
00401
00405 virtual Ret invokeR(P1 p1, P2 p2) = 0;
00406
00408
00413 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) = 0;
00414 };
00415
00416
00417
00418
00420
00429 template<class Ret, class P1, class P2, class P3, class P4>
00430 class ArRetFunctor4 : public ArRetFunctor3<Ret, P1, P2, P3>
00431 {
00432 public:
00433
00435 virtual ~ArRetFunctor4() {}
00436
00438 virtual Ret invokeR(void) = 0;
00439
00441
00444 virtual Ret invokeR(P1 p1) = 0;
00445
00447
00451 virtual Ret invokeR(P1 p1, P2 p2) = 0;
00452
00454
00459 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) = 0;
00460
00462
00468 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4) = 0;
00469 };
00470
00471
00472
00473
00474
00488
00489
00490 #ifndef SWIG
00491
00492
00502 class ArGlobalFunctor : public ArFunctor
00503 {
00504 public:
00505
00507 ArGlobalFunctor() {}
00509
00512 ArGlobalFunctor(void (*func)(void)) : myFunc(func) {}
00514 virtual ~ArGlobalFunctor() {}
00515
00517 virtual void invoke(void) {(*myFunc)();}
00518 protected:
00519
00520 void (*myFunc)(void);
00521 };
00522
00524
00532 template<class P1>
00533 class ArGlobalFunctor1 : public ArFunctor1<P1>
00534 {
00535 public:
00536
00538 ArGlobalFunctor1() {}
00540
00543 ArGlobalFunctor1(void (*func)(P1)) :
00544 myFunc(func), myP1() {}
00546
00550 ArGlobalFunctor1(void (*func)(P1), P1 p1) :
00551 myFunc(func), myP1(p1) {}
00552
00554 virtual ~ArGlobalFunctor1() {}
00555
00557 virtual void invoke(void) {(*myFunc)(myP1);}
00558
00560
00563 virtual void invoke(P1 p1) {(*myFunc)(p1);}
00564
00566
00569 virtual void setP1(P1 p1) {myP1=p1;}
00570
00571 protected:
00572
00573 void (*myFunc)(P1);
00574 P1 myP1;
00575 };
00576
00577
00579
00587 template<class P1, class P2>
00588 class ArGlobalFunctor2 : public ArFunctor2<P1, P2>
00589 {
00590 public:
00591
00593 ArGlobalFunctor2() {}
00594
00596
00599 ArGlobalFunctor2(void (*func)(P1, P2)) :
00600 myFunc(func), myP1(), myP2() {}
00601
00603
00607 ArGlobalFunctor2(void (*func)(P1, P2), P1 p1) :
00608 myFunc(func), myP1(p1), myP2() {}
00609
00611
00616 ArGlobalFunctor2(void (*func)(P1, P2), P1 p1, P2 p2) :
00617 myFunc(func), myP1(p1), myP2(p2) {}
00618
00620 virtual ~ArGlobalFunctor2() {}
00621
00623 virtual void invoke(void) {(*myFunc)(myP1, myP2);}
00624
00626
00629 virtual void invoke(P1 p1) {(*myFunc)(p1, myP2);}
00630
00632
00636 virtual void invoke(P1 p1, P2 p2) {(*myFunc)(p1, p2);}
00637
00639
00642 virtual void setP1(P1 p1) {myP1=p1;}
00643
00645
00648 virtual void setP2(P2 p2) {myP2=p2;}
00649
00650 protected:
00651
00652 void (*myFunc)(P1, P2);
00653 P1 myP1;
00654 P2 myP2;
00655 };
00656
00658
00666 template<class P1, class P2, class P3>
00667 class ArGlobalFunctor3 : public ArFunctor3<P1, P2, P3>
00668 {
00669 public:
00670
00672 ArGlobalFunctor3() {}
00673
00675
00678 ArGlobalFunctor3(void (*func)(P1, P2, P3)) :
00679 myFunc(func), myP1(), myP2(), myP3() {}
00680
00682
00686 ArGlobalFunctor3(void (*func)(P1, P2, P3), P1 p1) :
00687 myFunc(func), myP1(p1), myP2(), myP3() {}
00688
00690
00695 ArGlobalFunctor3(void (*func)(P1, P2, P3), P1 p1, P2 p2) :
00696 myFunc(func), myP1(p1), myP2(p2), myP3() {}
00697
00699
00705 ArGlobalFunctor3(void (*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
00706 myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
00707
00709 virtual ~ArGlobalFunctor3() {}
00710
00712 virtual void invoke(void) {(*myFunc)(myP1, myP2, myP3);}
00713
00715
00718 virtual void invoke(P1 p1) {(*myFunc)(p1, myP2, myP3);}
00719
00721
00725 virtual void invoke(P1 p1, P2 p2) {(*myFunc)(p1, p2, myP3);}
00726
00728
00733 virtual void invoke(P1 p1, P2 p2, P3 p3) {(*myFunc)(p1, p2, p3);}
00734
00736
00739 virtual void setP1(P1 p1) {myP1=p1;}
00740
00742
00745 virtual void setP2(P2 p2) {myP2=p2;}
00746
00748
00751 virtual void setP3(P3 p3) {myP3=p3;}
00752
00753 protected:
00754
00755 void (*myFunc)(P1, P2, P3);
00756 P1 myP1;
00757 P2 myP2;
00758 P3 myP3;
00759 };
00760
00761
00762
00763
00764
00766
00774 template<class P1, class P2, class P3, class P4>
00775 class ArGlobalFunctor4 : public ArFunctor4<P1, P2, P3, P4>
00776 {
00777 public:
00778
00780 ArGlobalFunctor4() {}
00781
00783
00786 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4)) :
00787 myFunc(func), myP1(), myP2(), myP3(), myP4() {}
00788
00790
00794 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1) :
00795 myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
00796
00798
00803 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
00804 myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
00805
00807
00813 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
00814 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
00815
00817
00824 ArGlobalFunctor4(void (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
00825 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
00826
00828 virtual ~ArGlobalFunctor4() {}
00829
00831 virtual void invoke(void) {(*myFunc)(myP1, myP2, myP3, myP4);}
00832
00834
00837 virtual void invoke(P1 p1) {(*myFunc)(p1, myP2, myP3, myP4);}
00838
00840
00844 virtual void invoke(P1 p1, P2 p2) {(*myFunc)(p1, p2, myP3, myP4);}
00845
00847
00852 virtual void invoke(P1 p1, P2 p2, P3 p3) {(*myFunc)(p1, p2, p3, myP4);}
00853
00855
00861 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) {(*myFunc)(p1, p2, p3, p4);}
00862
00864
00867 virtual void setP1(P1 p1) {myP1=p1;}
00868
00870
00873 virtual void setP2(P2 p2) {myP2=p2;}
00874
00876
00879 virtual void setP3(P3 p3) {myP3=p3;}
00880
00882
00885 virtual void setP4(P4 p4) {myP4=p4;}
00886
00887 protected:
00888
00889 void (*myFunc)(P1, P2, P3, P4);
00890 P1 myP1;
00891 P2 myP2;
00892 P3 myP3;
00893 P4 myP4;
00894 };
00895
00896
00897
00898
00913
00914
00916
00924 template<class Ret>
00925 class ArGlobalRetFunctor : public ArRetFunctor<Ret>
00926 {
00927 public:
00928
00930 ArGlobalRetFunctor() {}
00931
00933
00936 ArGlobalRetFunctor(Ret (*func)(void)) : myFunc(func) {}
00937
00939 virtual ~ArGlobalRetFunctor() {}
00940
00942 virtual Ret invokeR(void) {return (*myFunc)();}
00943
00944 protected:
00945
00946 Ret (*myFunc)(void);
00947 };
00948
00949
00951
00959 template<class Ret, class P1>
00960 class ArGlobalRetFunctor1 : public ArRetFunctor1<Ret, P1>
00961 {
00962 public:
00963
00965 ArGlobalRetFunctor1() {}
00966
00968
00971 ArGlobalRetFunctor1(Ret (*func)(P1)) :
00972 myFunc(func), myP1() {}
00973
00975
00979 ArGlobalRetFunctor1(Ret (*func)(P1), P1 p1) :
00980 myFunc(func), myP1(p1) {}
00981
00983 virtual ~ArGlobalRetFunctor1() {}
00984
00986 virtual Ret invokeR(void) {return (*myFunc)(myP1);}
00987
00989
00992 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1);}
00993
00995
00998 virtual void setP1(P1 p1) {myP1=p1;}
00999
01000 protected:
01001
01002 Ret (*myFunc)(P1);
01003 P1 myP1;
01004 };
01005
01007
01015 template<class Ret, class P1, class P2>
01016 class ArGlobalRetFunctor2 : public ArRetFunctor2<Ret, P1, P2>
01017 {
01018 public:
01019
01021 ArGlobalRetFunctor2() {}
01022
01024
01027 ArGlobalRetFunctor2(Ret (*func)(P1, P2)) :
01028 myFunc(func), myP1(), myP2() {}
01029
01031
01035 ArGlobalRetFunctor2(Ret (*func)(P1, P2), P1 p1) :
01036 myFunc(func), myP1(p1), myP2() {}
01037
01039
01043 ArGlobalRetFunctor2(Ret (*func)(P1, P2), P1 p1, P2 p2) :
01044 myFunc(func), myP1(p1), myP2(p2) {}
01045
01047 virtual ~ArGlobalRetFunctor2() {}
01048
01050 virtual Ret invokeR(void) {return (*myFunc)(myP1, myP2);}
01051
01053
01056 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1, myP2);}
01057
01059
01063 virtual Ret invokeR(P1 p1, P2 p2) {return (*myFunc)(p1, p2);}
01064
01066
01069 virtual void setP1(P1 p1) {myP1=p1;}
01070
01072
01075 virtual void setP2(P2 p2) {myP2=p2;}
01076
01077 protected:
01078
01079 Ret (*myFunc)(P1, P2);
01080 P1 myP1;
01081 P2 myP2;
01082 };
01083
01085
01093 template<class Ret, class P1, class P2, class P3>
01094 class ArGlobalRetFunctor3 : public ArRetFunctor3<Ret, P1, P2, P3>
01095 {
01096 public:
01097
01099 ArGlobalRetFunctor3() {}
01100
01102
01105 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3)) :
01106 myFunc(func), myP1(), myP2(), myP3() {}
01107
01109
01113 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3), P1 p1) :
01114 myFunc(func), myP1(p1), myP2(), myP3() {}
01115
01117
01122 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3), P1 p1, P2 p2) :
01123 myFunc(func), myP1(p1), myP2(p2), myP3() {}
01124
01126
01131 ArGlobalRetFunctor3(Ret (*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
01132 myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
01133
01135 virtual ~ArGlobalRetFunctor3() {}
01136
01138 virtual Ret invokeR(void) {return (*myFunc)(myP1, myP2, myP3);}
01139
01141
01144 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1, myP2, myP3);}
01145
01147
01151 virtual Ret invokeR(P1 p1, P2 p2) {return (*myFunc)(p1, p2, myP3);}
01152
01154
01159 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) {return (*myFunc)(p1, p2, p3);}
01160
01162
01165 virtual void setP1(P1 p1) {myP1=p1;}
01166
01168
01171 virtual void setP2(P2 p2) {myP2=p2;}
01172
01174
01177 virtual void setP3(P3 p3) {myP3=p3;}
01178
01179
01180
01181 protected:
01182
01183 Ret (*myFunc)(P1, P2, P3);
01184 P1 myP1;
01185 P2 myP2;
01186 P3 myP3;
01187 };
01188
01189
01190
01192
01200 template<class Ret, class P1, class P2, class P3, class P4>
01201 class ArGlobalRetFunctor4 : public ArRetFunctor4<Ret, P1, P2, P3, P4>
01202 {
01203 public:
01204
01206 ArGlobalRetFunctor4() {}
01207
01209
01212 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3)) :
01213 myFunc(func), myP1(), myP2(), myP3() {}
01214
01216
01220 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3), P1 p1) :
01221 myFunc(func), myP1(p1), myP2(), myP3() {}
01222
01224
01229 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3), P1 p1, P2 p2) :
01230 myFunc(func), myP1(p1), myP2(p2), myP3() {}
01231
01233
01239 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
01240 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
01241
01243
01250 ArGlobalRetFunctor4(Ret (*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
01251 myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
01252
01254 virtual ~ArGlobalRetFunctor4() {}
01255
01257 virtual Ret invokeR(void) {return (*myFunc)(myP1, myP2, myP3, myP4);}
01258
01260
01263 virtual Ret invokeR(P1 p1) {return (*myFunc)(p1, myP2, myP3, myP4);}
01264
01266
01270 virtual Ret invokeR(P1 p1, P2 p2) {return (*myFunc)(p1, p2, myP3, myP4);}
01271
01273
01278 virtual Ret invokeR(P1 p1, P2 p2, P3 p3) {return (*myFunc)(p1, p2, p3, myP4);}
01279
01281
01287 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4) {return (*myFunc)(p1, p2, p3, p4);}
01288
01290
01293 virtual void setP1(P1 p1) {myP1=p1;}
01294
01296
01299 virtual void setP2(P2 p2) {myP2=p2;}
01300
01302
01305 virtual void setP3(P3 p3) {myP3=p3;}
01306
01307
01309
01312 virtual void setP4(P4 p4) {myP4=p4;}
01313
01314 protected:
01315
01316 Ret (*myFunc)(P1, P2, P3, P4);
01317 P1 myP1;
01318 P2 myP2;
01319 P3 myP3;
01320 P4 myP4;
01321 };
01322
01323
01324
01325
01326
01327
01328 #endif // SWIG
01329
01343
01344
01346
01354 template<class T>
01355 class ArFunctorC : public ArFunctor
01356 {
01357 public:
01358
01360 ArFunctorC() {}
01361
01363
01366 ArFunctorC(T &obj, void (T::*func)(void)) : myObj(&obj), myFunc(func) {}
01367
01369
01372 ArFunctorC(T *obj, void (T::*func)(void)) : myObj(obj), myFunc(func) {}
01373
01375 virtual ~ArFunctorC() {}
01376
01378 virtual void invoke(void) {(myObj->*myFunc)();}
01379
01381
01384 virtual void setThis(T *obj) {myObj=obj;}
01385
01387
01390 virtual void setThis(T &obj) {myObj=&obj;}
01391
01392 protected:
01393
01394 T *myObj;
01395 void (T::*myFunc)(void);
01396 };
01397
01398
01400
01408 template<class T, class P1>
01409 class ArFunctor1C : public ArFunctor1<P1>
01410 {
01411 public:
01412
01414 ArFunctor1C() {}
01415
01417
01420 ArFunctor1C(T &obj, void (T::*func)(P1)) :
01421 myObj(&obj), myFunc(func), myP1() {}
01422
01424
01428 ArFunctor1C(T &obj, void (T::*func)(P1), P1 p1) :
01429 myObj(&obj), myFunc(func), myP1(p1) {}
01430
01432
01435 ArFunctor1C(T *obj, void (T::*func)(P1)) :
01436 myObj(obj), myFunc(func), myP1() {}
01437
01439
01443 ArFunctor1C(T *obj, void (T::*func)(P1), P1 p1) :
01444 myObj(obj), myFunc(func), myP1(p1) {}
01445
01447 virtual ~ArFunctor1C() {}
01448
01450 virtual void invoke(void) {(myObj->*myFunc)(myP1);}
01451
01453
01456 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1);}
01457
01459
01462 virtual void setThis(T *obj) {myObj=obj;}
01463
01465
01468 virtual void setThis(T &obj) {myObj=&obj;}
01469
01471
01474 virtual void setP1(P1 p1) {myP1=p1;}
01475
01476 protected:
01477
01478 T *myObj;
01479 void (T::*myFunc)(P1);
01480 P1 myP1;
01481 };
01482
01483
01485
01493 template<class T, class P1, class P2>
01494 class ArFunctor2C : public ArFunctor2<P1, P2>
01495 {
01496 public:
01497
01499 ArFunctor2C() {}
01500
01502
01505 ArFunctor2C(T &obj, void (T::*func)(P1, P2)) :
01506 myObj(&obj), myFunc(func), myP1(), myP2() {}
01507
01509
01513 ArFunctor2C(T &obj, void (T::*func)(P1, P2), P1 p1) :
01514 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
01515
01517
01522 ArFunctor2C(T &obj, void (T::*func)(P1, P2), P1 p1, P2 p2) :
01523 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
01524
01526
01529 ArFunctor2C(T *obj, void (T::*func)(P1, P2)) :
01530 myObj(obj), myFunc(func), myP1(), myP2() {}
01531
01533
01537 ArFunctor2C(T *obj, void (T::*func)(P1, P2), P1 p1) :
01538 myObj(obj), myFunc(func), myP1(p1), myP2() {}
01539
01541
01546 ArFunctor2C(T *obj, void (T::*func)(P1, P2), P1 p1, P2 p2) :
01547 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
01548
01550 virtual ~ArFunctor2C() {}
01551
01553 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2);}
01554
01556
01559 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2);}
01560
01562
01566 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2);}
01567
01569
01572 virtual void setThis(T *obj) {myObj=obj;}
01573
01575
01578 virtual void setThis(T &obj) {myObj=&obj;}
01579
01581
01584 virtual void setP1(P1 p1) {myP1=p1;}
01585
01587
01590 virtual void setP2(P2 p2) {myP2=p2;}
01591
01592 protected:
01593
01594 T *myObj;
01595 void (T::*myFunc)(P1, P2);
01596 P1 myP1;
01597 P2 myP2;
01598 };
01599
01601
01609 template<class T, class P1, class P2, class P3>
01610 class ArFunctor3C : public ArFunctor3<P1, P2, P3>
01611 {
01612 public:
01613
01615 ArFunctor3C() {}
01616
01618
01621 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3)) :
01622 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
01623
01625
01629 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3), P1 p1) :
01630 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
01631
01633
01638 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
01639 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
01640
01642
01648 ArFunctor3C(T &obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
01649 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
01650
01652
01655 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3)) :
01656 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
01657
01659
01663 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3), P1 p1) :
01664 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
01665
01667
01672 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
01673 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
01674
01676
01682 ArFunctor3C(T *obj, void (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
01683 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
01684
01686 virtual ~ArFunctor3C() {}
01687
01689 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3);}
01690
01692
01695 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3);}
01696
01698
01702 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3);}
01703
01705
01710 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3);}
01711
01713
01716 virtual void setThis(T *obj) {myObj=obj;}
01717
01719
01722 virtual void setThis(T &obj) {myObj=&obj;}
01723
01725
01728 virtual void setP1(P1 p1) {myP1=p1;}
01729
01731
01734 virtual void setP2(P2 p2) {myP2=p2;}
01735
01737
01740 virtual void setP3(P3 p3) {myP3=p3;}
01741
01742 protected:
01743
01744 T *myObj;
01745 void (T::*myFunc)(P1, P2, P3);
01746 P1 myP1;
01747 P2 myP2;
01748 P3 myP3;
01749 };
01750
01751
01752
01754
01762 template<class T, class P1, class P2, class P3, class P4>
01763 class ArFunctor4C : public ArFunctor4<P1, P2, P3, P4>
01764 {
01765 public:
01766
01768 ArFunctor4C() {}
01769
01771
01774 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4)) :
01775 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
01776
01778
01782 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
01783 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
01784
01786
01791 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
01792 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
01793
01795
01801 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
01802 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
01803
01805
01812 ArFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
01813 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
01814
01816
01819 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4)) :
01820 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
01821
01823
01827 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
01828 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
01829
01831
01836 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
01837 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
01838
01840
01846 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
01847 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
01848
01850
01857 ArFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
01858 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
01859
01860
01862 virtual ~ArFunctor4C() {}
01863
01865 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3, myP4);}
01866
01868
01871 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3, myP4);}
01872
01874
01878 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3, myP4);}
01879
01881
01886 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3, myP4);}
01887
01889
01895 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) {(myObj->*myFunc)(p1, p2, p3, p4);}
01896
01898
01901 virtual void setThis(T *obj) {myObj=obj;}
01902
01904
01907 virtual void setThis(T &obj) {myObj=&obj;}
01908
01910
01913 virtual void setP1(P1 p1) {myP1=p1;}
01914
01916
01919 virtual void setP2(P2 p2) {myP2=p2;}
01920
01922
01925 virtual void setP3(P3 p3) {myP3=p3;}
01926
01928
01931 virtual void setP4(P4 p4) {myP4=p4;}
01932
01933
01934 protected:
01935
01936 T *myObj;
01937 void (T::*myFunc)(P1, P2, P3, P4);
01938 P1 myP1;
01939 P2 myP2;
01940 P3 myP3;
01941 P4 myP4;
01942 };
01943
01944
01945
01946
01947
01948
01962
01963
01965
01973 template<class Ret, class T>
01974 class ArRetFunctorC : public ArRetFunctor<Ret>
01975 {
01976 public:
01977
01979 ArRetFunctorC() {}
01980
01982
01985 ArRetFunctorC(T &obj, Ret (T::*func)(void)) : myObj(&obj), myFunc(func) {}
01986
01988
01991 ArRetFunctorC(T *obj, Ret (T::*func)(void)) : myObj(obj), myFunc(func) {}
01992
01994 virtual ~ArRetFunctorC() {}
01995
01997 virtual Ret invokeR(void) {return (myObj->*myFunc)();}
01998
02000
02003 virtual void setThis(T *obj) {myObj=obj;}
02004
02006
02009 virtual void setThis(T &obj) {myObj=&obj;}
02010
02011 protected:
02012
02013 T *myObj;
02014 Ret (T::*myFunc)(void);
02015 };
02016
02018
02027 template<class Ret, class T, class P1>
02028 class ArRetFunctor1C : public ArRetFunctor1<Ret, P1>
02029 {
02030 public:
02031
02033 ArRetFunctor1C() {}
02034
02036
02039 ArRetFunctor1C(T &obj, Ret (T::*func)(P1)) :
02040 myObj(&obj), myFunc(func), myP1() {}
02041
02043
02047 ArRetFunctor1C(T &obj, Ret (T::*func)(P1), P1 p1) :
02048 myObj(&obj), myFunc(func), myP1(p1) {}
02049
02051
02054 ArRetFunctor1C(T *obj, Ret (T::*func)(P1)) :
02055 myObj(obj), myFunc(func), myP1() {}
02056
02058
02062 ArRetFunctor1C(T *obj, Ret (T::*func)(P1), P1 p1) :
02063 myObj(obj), myFunc(func), myP1(p1) {}
02064
02066 virtual ~ArRetFunctor1C() {}
02067
02069 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1);}
02070
02072
02075 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1);}
02076
02078
02081 virtual void setThis(T *obj) {myObj=obj;}
02082
02084
02087 virtual void setThis(T &obj) {myObj=&obj;}
02088
02090
02093 virtual void setP1(P1 p1) {myP1=p1;}
02094
02095 protected:
02096
02097 T *myObj;
02098 Ret (T::*myFunc)(P1);
02099 P1 myP1;
02100 };
02101
02103
02112 template<class Ret, class T, class P1, class P2>
02113 class ArRetFunctor2C : public ArRetFunctor2<Ret, P1, P2>
02114 {
02115 public:
02116
02118 ArRetFunctor2C() {}
02119
02121
02124 ArRetFunctor2C(T &obj, Ret (T::*func)(P1, P2)) :
02125 myObj(&obj), myFunc(func), myP1(), myP2() {}
02126
02128
02132 ArRetFunctor2C(T &obj, Ret (T::*func)(P1, P2), P1 p1) :
02133 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
02134
02136
02141 ArRetFunctor2C(T &obj, Ret (T::*func)(P1, P2), P1 p1, P2 p2) :
02142 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
02143
02145
02148 ArRetFunctor2C(T *obj, Ret (T::*func)(P1, P2)) :
02149 myObj(obj), myFunc(func), myP1(), myP2() {}
02150
02152
02156 ArRetFunctor2C(T *obj, Ret (T::*func)(P1, P2), P1 p1) :
02157 myObj(obj), myFunc(func), myP1(p1), myP2() {}
02158
02160
02165 ArRetFunctor2C(T *obj, Ret (T::*func)(P1, P2), P1 p1, P2 p2) :
02166 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
02167
02169 virtual ~ArRetFunctor2C() {}
02170
02172 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2);}
02173
02175
02178 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2);}
02179
02181
02185 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2);}
02186
02188
02191 virtual void setThis(T *obj) {myObj=obj;}
02192
02194
02197 virtual void setThis(T &obj) {myObj=&obj;}
02198
02200
02203 virtual void setP1(P1 p1) {myP1=p1;}
02204
02206
02209 virtual void setP2(P2 p2) {myP2=p2;}
02210
02211 protected:
02212
02213 T *myObj;
02214 Ret (T::*myFunc)(P1, P2);
02215 P1 myP1;
02216 P2 myP2;
02217 };
02218
02220
02229 template<class Ret, class T, class P1, class P2, class P3>
02230 class ArRetFunctor3C : public ArRetFunctor3<Ret, P1, P2, P3>
02231 {
02232 public:
02233
02235 ArRetFunctor3C() {}
02236
02238
02241 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3)) :
02242 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
02243
02245
02249 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3), P1 p1) :
02250 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02251
02253
02258 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
02259 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02260
02262
02267 ArRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
02268 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02269
02271
02274 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3)) :
02275 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
02276
02278
02282 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3), P1 p1) :
02283 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02284
02286
02291 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2) :
02292 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02293
02295
02301 ArRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3), P1 p1, P2 p2, P3 p3) :
02302 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02303
02305 virtual ~ArRetFunctor3C() {}
02306
02308 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3);}
02309
02311
02314 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3);}
02315
02317
02321 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3);}
02322
02324
02328 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
02329 {return (myObj->*myFunc)(p1, p2, p3);}
02330
02332
02335 virtual void setThis(T *obj) {myObj=obj;}
02336
02338
02341 virtual void setThis(T &obj) {myObj=&obj;}
02342
02344
02347 virtual void setP1(P1 p1) {myP1=p1;}
02348
02350
02353 virtual void setP2(P2 p2) {myP2=p2;}
02354
02356
02359 virtual void setP3(P3 p3) {myP3=p3;}
02360
02361 protected:
02362
02363 T *myObj;
02364 Ret (T::*myFunc)(P1, P2, P3);
02365 P1 myP1;
02366 P2 myP2;
02367 P3 myP3;
02368 };
02369
02370
02371
02372
02373
02374
02375
02377
02386 template<class Ret, class T, class P1, class P2, class P3, class P4>
02387 class ArRetFunctor4C : public ArRetFunctor4<Ret, P1, P2, P3, P4>
02388 {
02389 public:
02390
02392 ArRetFunctor4C() {}
02393
02395
02398 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4)) :
02399 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
02400
02402
02406 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1) :
02407 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
02408
02410
02415 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
02416 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
02417
02419
02425 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
02426 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
02427
02429
02436 ArRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
02437 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
02438
02439
02440
02442
02445 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4)) :
02446 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
02447
02449
02453 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1) :
02454 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
02455
02457
02462 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
02463 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
02464
02466
02472 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
02473 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
02474
02476
02483 ArRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
02484 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
02485
02487 virtual ~ArRetFunctor4C() {}
02488
02490 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3, myP4);}
02491
02493
02496 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3, myP4);}
02497
02499
02503 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3, myP4);}
02504
02506
02510 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
02511 {return (myObj->*myFunc)(p1, p2, p3, myP4);}
02512
02514
02520 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4)
02521 {return (myObj->*myFunc)(p1, p2, p3, p4);}
02522
02523
02525
02528 virtual void setThis(T *obj) {myObj=obj;}
02529
02531
02534 virtual void setThis(T &obj) {myObj=&obj;}
02535
02537
02540 virtual void setP1(P1 p1) {myP1=p1;}
02541
02543
02546 virtual void setP2(P2 p2) {myP2=p2;}
02547
02549
02552 virtual void setP3(P3 p3) {myP3=p3;}
02553
02555
02558 virtual void setP4(P4 p4) {myP4=p4;}
02559
02560 protected:
02561
02562 T *myObj;
02563 Ret (T::*myFunc)(P1, P2, P3, P4);
02564 P1 myP1;
02565 P2 myP2;
02566 P3 myP3;
02567 P4 myP4;
02568 };
02569
02570
02572 #ifndef SWIG
02586
02587
02589
02599 template<class T>
02600 class ArConstFunctorC : public ArFunctor
02601 {
02602 public:
02603
02605 ArConstFunctorC() {}
02606
02608
02611 ArConstFunctorC(T &obj, void (T::*func)(void) const) : myObj(&obj), myFunc(func) {}
02612
02614
02617 ArConstFunctorC(T *obj, void (T::*func)(void) const) : myObj(obj), myFunc(func) {}
02618
02620 virtual ~ArConstFunctorC() {}
02621
02623 virtual void invoke(void) {(myObj->*myFunc)();}
02624
02626
02629 virtual void setThis(T *obj) {myObj=obj;}
02630
02632
02635 virtual void setThis(T &obj) {myObj=&obj;}
02636
02637 protected:
02638
02639 T *myObj;
02640 void (T::*myFunc)(void) const;
02641 };
02642
02643
02645
02653 template<class T, class P1>
02654 class ArConstFunctor1C : public ArFunctor1<P1>
02655 {
02656 public:
02657
02659 ArConstFunctor1C() {}
02660
02662
02665 ArConstFunctor1C(T &obj, void (T::*func)(P1) const) :
02666 myObj(&obj), myFunc(func), myP1() {}
02667
02669
02673 ArConstFunctor1C(T &obj, void (T::*func)(P1) const, P1 p1) :
02674 myObj(&obj), myFunc(func), myP1(p1) {}
02675
02677
02680 ArConstFunctor1C(T *obj, void (T::*func)(P1) const) :
02681 myObj(obj), myFunc(func), myP1() {}
02682
02684
02688 ArConstFunctor1C(T *obj, void (T::*func)(P1) const, P1 p1) :
02689 myObj(obj), myFunc(func), myP1(p1) {}
02690
02692 virtual ~ArConstFunctor1C() {}
02693
02695 virtual void invoke(void) {(myObj->*myFunc)(myP1);}
02696
02698
02701 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1);}
02702
02704
02707 virtual void setThis(T *obj) {myObj=obj;}
02708
02710
02713 virtual void setThis(T &obj) {myObj=&obj;}
02714
02716
02719 virtual void setP1(P1 p1) {myP1=p1;}
02720
02721 protected:
02722
02723 T *myObj;
02724 void (T::*myFunc)(P1) const;
02725 P1 myP1;
02726 };
02727
02728
02730
02738 template<class T, class P1, class P2>
02739 class ArConstFunctor2C : public ArFunctor2<P1, P2>
02740 {
02741 public:
02742
02744 ArConstFunctor2C() {}
02745
02747
02750 ArConstFunctor2C(T &obj, void (T::*func)(P1, P2) const) :
02751 myObj(&obj), myFunc(func), myP1(), myP2() {}
02752
02754
02758 ArConstFunctor2C(T &obj, void (T::*func)(P1, P2) const, P1 p1) :
02759 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
02760
02762
02767 ArConstFunctor2C(T &obj, void (T::*func)(P1, P2) const, P1 p1, P2 p2) :
02768 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
02769
02771
02774 ArConstFunctor2C(T *obj, void (T::*func)(P1, P2) const) :
02775 myObj(obj), myFunc(func), myP1(), myP2() {}
02776
02778
02782 ArConstFunctor2C(T *obj, void (T::*func)(P1, P2) const, P1 p1) :
02783 myObj(obj), myFunc(func), myP1(p1), myP2() {}
02784
02786
02791 ArConstFunctor2C(T *obj, void (T::*func)(P1, P2) const, P1 p1, P2 p2) :
02792 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
02793
02795 virtual ~ArConstFunctor2C() {}
02796
02798 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2);}
02799
02801
02804 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2);}
02805
02807
02811 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2);}
02812
02814
02817 virtual void setThis(T *obj) {myObj=obj;}
02818
02820
02823 virtual void setThis(T &obj) {myObj=&obj;}
02824
02826
02829 virtual void setP1(P1 p1) {myP1=p1;}
02830
02832
02835 virtual void setP2(P2 p2) {myP2=p2;}
02836
02837 protected:
02838
02839 T *myObj;
02840 void (T::*myFunc)(P1, P2) const;
02841 P1 myP1;
02842 P2 myP2;
02843 };
02844
02846
02854 template<class T, class P1, class P2, class P3>
02855 class ArConstFunctor3C : public ArFunctor3<P1, P2, P3>
02856 {
02857 public:
02858
02860 ArConstFunctor3C() {}
02861
02863
02866 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const) :
02867 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
02868
02870
02874 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const, P1 p1) :
02875 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02876
02878
02883 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
02884 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02885
02887
02893 ArConstFunctor3C(T &obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
02894 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02895
02897
02900 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const) :
02901 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
02902
02904
02908 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const, P1 p1) :
02909 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
02910
02912
02917 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
02918 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
02919
02921
02927 ArConstFunctor3C(T *obj, void (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
02928 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
02929
02931 virtual ~ArConstFunctor3C() {}
02932
02934 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3);}
02935
02937
02940 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3);}
02941
02943
02947 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3);}
02948
02950
02955 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3);}
02956
02958
02961 virtual void setThis(T *obj) {myObj=obj;}
02962
02964
02967 virtual void setThis(T &obj) {myObj=&obj;}
02968
02970
02973 virtual void setP1(P1 p1) {myP1=p1;}
02974
02976
02979 virtual void setP2(P2 p2) {myP2=p2;}
02980
02982
02985 virtual void setP3(P3 p3) {myP3=p3;}
02986
02987 protected:
02988
02989 T *myObj;
02990 void (T::*myFunc)(P1, P2, P3) const;
02991 P1 myP1;
02992 P2 myP2;
02993 P3 myP3;
02994 };
02995
02996
02997
02999
03007 template<class T, class P1, class P2, class P3, class P4>
03008 class ArConstFunctor4C : public ArFunctor4<P1, P2, P3, P4>
03009 {
03010 public:
03011
03013 ArConstFunctor4C() {}
03014
03016
03019 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4) const) :
03020 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03021
03023
03027 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
03028 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03029
03031
03036 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
03037 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03038
03040
03046 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
03047 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03048
03050
03057 ArConstFunctor4C(T &obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
03058 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03059
03061
03064 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4) const) :
03065 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03066
03068
03072 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1) :
03073 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03074
03076
03081 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2) :
03082 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03083
03085
03091 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3) :
03092 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03093
03095
03102 ArConstFunctor4C(T *obj, void (T::*func)(P1, P2, P3, P4), P1 p1, P2 p2, P3 p3, P4 p4) :
03103 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03104
03105
03107 virtual ~ArConstFunctor4C() {}
03108
03110 virtual void invoke(void) {(myObj->*myFunc)(myP1, myP2, myP3, myP4);}
03111
03113
03116 virtual void invoke(P1 p1) {(myObj->*myFunc)(p1, myP2, myP3, myP4);}
03117
03119
03123 virtual void invoke(P1 p1, P2 p2) {(myObj->*myFunc)(p1, p2, myP3, myP4);}
03124
03126
03131 virtual void invoke(P1 p1, P2 p2, P3 p3) {(myObj->*myFunc)(p1, p2, p3, myP4);}
03132
03134
03140 virtual void invoke(P1 p1, P2 p2, P3 p3, P4 p4) {(myObj->*myFunc)(p1, p2, p3, p4);}
03141
03143
03146 virtual void setThis(T *obj) {myObj=obj;}
03147
03149
03152 virtual void setThis(T &obj) {myObj=&obj;}
03153
03155
03158 virtual void setP1(P1 p1) {myP1=p1;}
03159
03161
03164 virtual void setP2(P2 p2) {myP2=p2;}
03165
03167
03170 virtual void setP3(P3 p3) {myP3=p3;}
03171
03173
03176 virtual void setP4(P4 p4) {myP4=p4;}
03177
03178
03179 protected:
03180
03181 T *myObj;
03182 void (T::*myFunc)(P1, P2, P3, P4) const;
03183 P1 myP1;
03184 P2 myP2;
03185 P3 myP3;
03186 P4 myP4;
03187 };
03188
03189
03190
03191
03192
03193
03207
03208
03210
03218 template<class Ret, class T>
03219 class ArConstRetFunctorC : public ArRetFunctor<Ret>
03220 {
03221 public:
03222
03224 ArConstRetFunctorC() {}
03225
03227
03230 ArConstRetFunctorC(T &obj, Ret (T::*func)(void) const) : myObj(&obj), myFunc(func) {}
03231
03233
03236 ArConstRetFunctorC(T *obj, Ret (T::*func)(void) const) : myObj(obj), myFunc(func) {}
03237
03239 virtual ~ArConstRetFunctorC() {}
03240
03242 virtual Ret invokeR(void) {return (myObj->*myFunc)();}
03243
03245
03248 virtual void setThis(T *obj) {myObj=obj;}
03249
03251
03254 virtual void setThis(T &obj) {myObj=&obj;}
03255
03256 protected:
03257
03258 T *myObj;
03259 Ret (T::*myFunc)(void) const;
03260 };
03261
03263
03271 template<class Ret, class T, class P1>
03272 class ArConstRetFunctor1C : public ArRetFunctor1<Ret, P1>
03273 {
03274 public:
03275
03277 ArConstRetFunctor1C() {}
03278
03280
03283 ArConstRetFunctor1C(T &obj, Ret (T::*func)(P1) const) :
03284 myObj(&obj), myFunc(func), myP1() {}
03285
03287
03291 ArConstRetFunctor1C(T &obj, Ret (T::*func)(P1) const, P1 p1) :
03292 myObj(&obj), myFunc(func), myP1(p1) {}
03293
03295
03298 ArConstRetFunctor1C(T *obj, Ret (T::*func)(P1) const) :
03299 myObj(obj), myFunc(func), myP1() {}
03300
03302
03306 ArConstRetFunctor1C(T *obj, Ret (T::*func)(P1) const, P1 p1) :
03307 myObj(obj), myFunc(func), myP1(p1) {}
03308
03310 virtual ~ArConstRetFunctor1C() {}
03311
03313 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1);}
03314
03316
03319 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1);}
03320
03322
03325 virtual void setThis(T *obj) {myObj=obj;}
03326
03328
03331 virtual void setThis(T &obj) {myObj=&obj;}
03332
03334
03337 virtual void setP1(P1 p1) {myP1=p1;}
03338
03339 protected:
03340
03341 T *myObj;
03342 Ret (T::*myFunc)(P1) const;
03343 P1 myP1;
03344 };
03345
03347
03355 template<class Ret, class T, class P1, class P2>
03356 class ArConstRetFunctor2C : public ArRetFunctor2<Ret, P1, P2>
03357 {
03358 public:
03359
03361 ArConstRetFunctor2C() {}
03362
03364
03367 ArConstRetFunctor2C(T &obj, Ret (T::*func)(P1, P2) const) :
03368 myObj(&obj), myFunc(func), myP1(), myP2() {}
03369
03371
03375 ArConstRetFunctor2C(T &obj, Ret (T::*func)(P1, P2) const, P1 p1) :
03376 myObj(&obj), myFunc(func), myP1(p1), myP2() {}
03377
03379
03384 ArConstRetFunctor2C(T &obj, Ret (T::*func)(P1, P2) const, P1 p1, P2 p2) :
03385 myObj(&obj), myFunc(func), myP1(p1), myP2(p2) {}
03386
03388
03391 ArConstRetFunctor2C(T *obj, Ret (T::*func)(P1, P2) const) :
03392 myObj(obj), myFunc(func), myP1(), myP2() {}
03393
03395
03399 ArConstRetFunctor2C(T *obj, Ret (T::*func)(P1, P2) const, P1 p1) :
03400 myObj(obj), myFunc(func), myP1(p1), myP2() {}
03401
03403
03408 ArConstRetFunctor2C(T *obj, Ret (T::*func)(P1, P2) const, P1 p1, P2 p2) :
03409 myObj(obj), myFunc(func), myP1(p1), myP2(p2) {}
03410
03412 virtual ~ArConstRetFunctor2C() {}
03413
03415 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2);}
03416
03418
03421 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2);}
03422
03424
03428 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2);}
03429
03431
03434 virtual void setThis(T *obj) {myObj=obj;}
03435
03437
03440 virtual void setThis(T &obj) {myObj=&obj;}
03441
03443
03446 virtual void setP1(P1 p1) {myP1=p1;}
03447
03449
03452 virtual void setP2(P2 p2) {myP2=p2;}
03453
03454 protected:
03455
03456 T *myObj;
03457 Ret (T::*myFunc)(P1, P2) const;
03458 P1 myP1;
03459 P2 myP2;
03460 };
03461
03463
03471 template<class Ret, class T, class P1, class P2, class P3>
03472 class ArConstRetFunctor3C : public ArRetFunctor3<Ret, P1, P2, P3>
03473 {
03474 public:
03475
03477 ArConstRetFunctor3C() {}
03478
03480
03483 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const) :
03484 myObj(&obj), myFunc(func), myP1(), myP2(), myP3() {}
03485
03487
03491 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const, P1 p1) :
03492 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3() {}
03493
03495
03500 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
03501 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
03502
03504
03509 ArConstRetFunctor3C(T &obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
03510 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
03511
03513
03516 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const) :
03517 myObj(obj), myFunc(func), myP1(), myP2(), myP3() {}
03518
03520
03524 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const, P1 p1) :
03525 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3() {}
03526
03528
03533 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2) :
03534 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3() {}
03535
03537
03543 ArConstRetFunctor3C(T *obj, Ret (T::*func)(P1, P2, P3) const, P1 p1, P2 p2, P3 p3) :
03544 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3) {}
03545
03547 virtual ~ArConstRetFunctor3C() {}
03548
03550 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3);}
03551
03553
03556 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3);}
03557
03559
03563 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3);}
03564
03566
03570 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
03571 {return (myObj->*myFunc)(p1, p2, p3);}
03572
03574
03577 virtual void setThis(T *obj) {myObj=obj;}
03578
03580
03583 virtual void setThis(T &obj) {myObj=&obj;}
03584
03586
03589 virtual void setP1(P1 p1) {myP1=p1;}
03590
03592
03595 virtual void setP2(P2 p2) {myP2=p2;}
03596
03598
03601 virtual void setP3(P3 p3) {myP3=p3;}
03602
03603 protected:
03604
03605 T *myObj;
03606 Ret (T::*myFunc)(P1, P2, P3) const;
03607 P1 myP1;
03608 P2 myP2;
03609 P3 myP3;
03610 };
03611
03612
03613
03614
03615
03616
03617
03619
03627 template<class Ret, class T, class P1, class P2, class P3, class P4>
03628 class ArConstRetFunctor4C : public ArRetFunctor4<Ret, P1, P2, P3, P4>
03629 {
03630 public:
03631
03633 ArConstRetFunctor4C() {}
03634
03636
03639 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const) :
03640 myObj(&obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03641
03643
03647 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1) :
03648 myObj(&obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03649
03651
03656 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2) :
03657 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03658
03660
03666 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3) :
03667 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03668
03670
03677 ArConstRetFunctor4C(T &obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3, P4 p4) :
03678 myObj(&obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03679
03680
03681
03683
03686 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const) :
03687 myObj(obj), myFunc(func), myP1(), myP2(), myP3(), myP4() {}
03688
03690
03694 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1) :
03695 myObj(obj), myFunc(func), myP1(p1), myP2(), myP3(), myP4() {}
03696
03698
03703 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2) :
03704 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(), myP4() {}
03705
03707
03713 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3) :
03714 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4() {}
03715
03717
03724 ArConstRetFunctor4C(T *obj, Ret (T::*func)(P1, P2, P3, P4) const, P1 p1, P2 p2, P3 p3, P4 p4) :
03725 myObj(obj), myFunc(func), myP1(p1), myP2(p2), myP3(p3), myP4(p4) {}
03726
03728 virtual ~ArConstRetFunctor4C() {}
03729
03731 virtual Ret invokeR(void) {return (myObj->*myFunc)(myP1, myP2, myP3, myP4);}
03732
03734
03737 virtual Ret invokeR(P1 p1) {return (myObj->*myFunc)(p1, myP2, myP3, myP4);}
03738
03740
03744 virtual Ret invokeR(P1 p1, P2 p2) {return (myObj->*myFunc)(p1, p2, myP3, myP4);}
03745
03747
03751 virtual Ret invokeR(P1 p1, P2 p2, P3 p3)
03752 {return (myObj->*myFunc)(p1, p2, p3, myP4);}
03753
03755
03761 virtual Ret invokeR(P1 p1, P2 p2, P3 p3, P4 p4)
03762 {return (myObj->*myFunc)(p1, p2, p3, p4);}
03763
03764
03766
03769 virtual void setThis(T *obj) {myObj=obj;}
03770
03772
03775 virtual void setThis(T &obj) {myObj=&obj;}
03776
03778
03781 virtual void setP1(P1 p1) {myP1=p1;}
03782
03784
03787 virtual void setP2(P2 p2) {myP2=p2;}
03788
03790
03793 virtual void setP3(P3 p3) {myP3=p3;}
03794
03796
03799 virtual void setP4(P4 p4) {myP4=p4;}
03800
03801 protected:
03802
03803 T *myObj;
03804 Ret (T::*myFunc)(P1, P2, P3, P4) const;
03805 P1 myP1;
03806 P2 myP2;
03807 P3 myP3;
03808 P4 myP4;
03809 };
03810
03811
03812 #endif
03813
03814
03815
03816 #endif // ARFUNCTOR_H
03817
03818