Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages | Examples

ArFunctor.h

00001 /*
00002 MobileRobots Advanced Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004, 2005 ActivMedia Robotics LLC
00004 Copyright (C) 2006, 2007 MobileRobots Inc.
00005 
00006      This program is free software; you can redistribute it and/or modify
00007      it under the terms of the GNU General Public License as published by
00008      the Free Software Foundation; either version 2 of the License, or
00009      (at your option) any later version.
00010 
00011      This program is distributed in the hope that it will be useful,
00012      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014      GNU General Public License for more details.
00015 
00016      You should have received a copy of the GNU General Public License
00017      along with this program; if not, write to the Free Software
00018      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 If you wish to redistribute ARIA under different terms, contact 
00021 MobileRobots for information about a commercial version of ARIA at 
00022 robots@mobilerobots.com or 
00023 MobileRobots Inc, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
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 // Start 4
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 // Start 4
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 

Generated on Tue Feb 20 10:51:40 2007 for Aria by  doxygen 1.4.0