Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

extends.h

Go to the documentation of this file.
00001 #ifndef GAUDIKERNEL_EXTENDS_H
00002 #define GAUDIKERNEL_EXTENDS_H
00003 
00004 #include "GaudiKernel/IInterface.h"
00005 
00009 template <typename BASE, typename I1>
00010 struct GAUDI_API extends1: public BASE, virtual public extend_interfaces1<I1> {
00012   typedef extends1 base_class;
00014   typedef extend_interfaces1<I1> extend_interfaces_base;
00015 #ifndef __GCCXML__
00017   typedef typename extend_interfaces_base::ext_iids interfaces;
00018 #endif
00019 
00021   template <typename A1, typename A2, typename A3> extends1(A1 a1, A2 a2, A3 a3): BASE(a1,a2,a3){}
00023   template <typename A1, typename A2> extends1(A1 a1, A2 a2): BASE(a1, a2){}
00025   template <typename A1> extends1(A1 a1): BASE(a1){}
00027   extends1(): BASE(){}
00028 
00030   virtual void *i_cast(const std::type_info &tid) const {
00031     void *ptr = 0;
00032 #ifndef __GCCXML__
00033     check_cast<base_class> caster(this,tid,ptr);
00034     mpl::for_each<interfaces>(caster);
00035 #endif
00036     if (!ptr) {
00037       ptr = BASE::i_cast(tid);
00038     }
00039     return ptr;
00040   }
00041 
00043   virtual StatusCode queryInterface(const InterfaceID &ti, void** pp){
00044     if (!pp) return StatusCode::FAILURE;
00045     *pp = 0;
00046 #ifndef __GCCXML__
00047     interfaceMatch<base_class> matcher(this,ti,*pp);
00048     mpl::for_each<interfaces>(matcher);
00049     if (!*pp) { // cast failed, try the base class
00050       return BASE::queryInterface(ti,pp);
00051     }
00052     this->addRef();
00053 #endif
00054     return StatusCode::SUCCESS;
00055   }
00056 
00058   virtual std::vector<std::string> getInterfaceNames() const {
00059     std::vector<std::string> v = BASE::getInterfaceNames(); // start from the base
00060 #ifndef __GCCXML__
00061     AppendInterfaceName appender(v);
00062     mpl::for_each<interfaces>(appender);
00063 #endif
00064     return v;
00065   }
00066 
00068   virtual ~extends1() {}
00069 };
00070 
00074 template <typename BASE, typename I1, typename I2>
00075 struct GAUDI_API extends2: public BASE, virtual public extend_interfaces2<I1,I2> {
00077   typedef extends2 base_class;
00079   typedef extend_interfaces2<I1,I2> extend_interfaces_base;
00080 #ifndef __GCCXML__
00082   typedef typename extend_interfaces_base::ext_iids interfaces;
00083 #endif
00084 
00086   template <typename A1, typename A2, typename A3> extends2(A1 a1, A2 a2, A3 a3): BASE(a1,a2,a3){}
00088   template <typename A1, typename A2> extends2(A1 a1, A2 a2): BASE(a1, a2){}
00090   template <typename A1> extends2(A1 a1): BASE(a1){}
00092   extends2(): BASE(){}
00093 
00095   virtual void *i_cast(const std::type_info &tid) const {
00096     void *ptr = 0;
00097 #ifndef __GCCXML__
00098     check_cast<base_class> caster(this,tid,ptr);
00099     mpl::for_each<interfaces>(caster);
00100 #endif
00101     if (!ptr) {
00102       ptr = BASE::i_cast(tid);
00103     }
00104     return ptr;
00105   }
00106 
00108   virtual StatusCode queryInterface(const InterfaceID &ti, void** pp){
00109     if (!pp) return StatusCode::FAILURE;
00110     *pp = 0;
00111 #ifndef __GCCXML__
00112     interfaceMatch<base_class> matcher(this,ti,*pp);
00113     mpl::for_each<interfaces>(matcher);
00114     if (!*pp) { // cast failed, try the base class
00115       return BASE::queryInterface(ti,pp);
00116     }
00117     this->addRef();
00118 #endif
00119     return StatusCode::SUCCESS;
00120   }
00121 
00123   virtual std::vector<std::string> getInterfaceNames() const {
00124     std::vector<std::string> v = BASE::getInterfaceNames(); // start from the base
00125 #ifndef __GCCXML__
00126     AppendInterfaceName appender(v);
00127     mpl::for_each<interfaces>(appender);
00128 #endif
00129     return v;
00130   }
00131 
00133   virtual ~extends2() {}
00134 };
00135 
00139 template <typename BASE, typename I1, typename I2, typename I3>
00140 struct GAUDI_API extends3: public BASE, virtual public extend_interfaces3<I1,I2,I3> {
00142   typedef extends3 base_class;
00144   typedef extend_interfaces3<I1,I2,I3> extend_interfaces_base;
00145 #ifndef __GCCXML__
00147   typedef typename extend_interfaces_base::ext_iids interfaces;
00148 #endif
00149 
00151   template <typename A1, typename A2, typename A3> extends3(A1 a1, A2 a2, A3 a3): BASE(a1,a2,a3){}
00153   template <typename A1, typename A2> extends3(A1 a1, A2 a2): BASE(a1, a2){}
00155   template <typename A1> extends3(A1 a1): BASE(a1){}
00157   extends3(): BASE(){}
00158 
00160   virtual void *i_cast(const std::type_info &tid) const {
00161     void *ptr = 0;
00162 #ifndef __GCCXML__
00163     check_cast<base_class> caster(this,tid,ptr);
00164     mpl::for_each<interfaces>(caster);
00165 #endif
00166     if (!ptr) {
00167       ptr = BASE::i_cast(tid);
00168     }
00169     return ptr;
00170   }
00171 
00173   virtual StatusCode queryInterface(const InterfaceID &ti, void** pp){
00174     if (!pp) return StatusCode::FAILURE;
00175     *pp = 0;
00176 #ifndef __GCCXML__
00177     interfaceMatch<base_class> matcher(this,ti,*pp);
00178     mpl::for_each<interfaces>(matcher);
00179     if (!*pp) { // cast failed, try the base class
00180       return BASE::queryInterface(ti,pp);
00181     }
00182     this->addRef();
00183 #endif
00184     return StatusCode::SUCCESS;
00185   }
00186 
00188   virtual std::vector<std::string> getInterfaceNames() const {
00189     std::vector<std::string> v = BASE::getInterfaceNames(); // start from the base
00190 #ifndef __GCCXML__
00191     AppendInterfaceName appender(v);
00192     mpl::for_each<interfaces>(appender);
00193 #endif
00194     return v;
00195   }
00196 
00198   virtual ~extends3() {}
00199 };
00200 
00201 #endif /* GAUDIKERNEL_EXTENDS_H */

Generated at Mon May 3 12:14:13 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004