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

ArFunctor.h

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

Generated on Wed Oct 19 12:56:35 2005 for Aria by  doxygen 1.4.0