Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/Geant4/tools/sg/bcbk is written in an unsupported language. File is not indexed.

0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003 
0004 #ifndef tools_sg_bcbk
0005 #define tools_sg_bcbk
0006 
0007 // "cbk" is for callback. Base class to handle a callback.
0008 
0009 #include "../scast"
0010 #include "../S_STRING"
0011 
0012 #include <string>
0013 
0014 namespace tools {
0015 namespace sg {
0016 
0017 enum return_action {
0018   return_none,
0019   return_to_render
0020 };
0021 
0022 class bcbk {
0023 public:
0024   TOOLS_SCLASS(tools::sg::bcbk)
0025 public:
0026   virtual void* cast(const std::string& a_class) const {
0027     if(void* p = cmp_cast<bcbk>(this,a_class)) {return p;}
0028     return 0;
0029   }
0030   virtual const std::string& s_cls() const {return s_class();}
0031 public:
0032   virtual return_action action() = 0;
0033   virtual bcbk* copy() const = 0;
0034 public:
0035   virtual ~bcbk(){
0036   }
0037 protected:
0038   bcbk()
0039   :m_single_shoot(false)
0040   ,m_is_valid(true)
0041   {
0042   }
0043   bcbk(const bcbk& a_from)
0044   :m_single_shoot(a_from.m_single_shoot)
0045   ,m_is_valid(a_from.m_is_valid)
0046   {
0047   }
0048   bcbk& operator=(const bcbk& a_from){
0049     m_single_shoot = a_from.m_single_shoot;
0050     m_is_valid = a_from.m_is_valid;
0051     return *this;
0052   }
0053 public:
0054   void set_single_shoot(bool a_value) {m_single_shoot = a_value;}
0055   bool is_single_shoot() const {return m_single_shoot;}
0056 
0057   bool is_valid() const {return m_is_valid;}
0058   void invalidate() {m_is_valid = false;}
0059 protected:
0060   bool m_single_shoot;
0061   bool m_is_valid;
0062 };
0063 
0064 }}
0065 
0066 #define TOOLS_CBK(a__class,a__sclass,a__parent)\
0067 private:\
0068   typedef a__parent parent;\
0069 public:\
0070   TOOLS_SCLASS(a__sclass)\
0071 public:\
0072   virtual void* cast(const std::string& a_class) const {\
0073     if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
0074     return parent::cast(a_class);\
0075   }\
0076   virtual const std::string& s_cls() const {return s_class();}\
0077   virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
0078 
0079 #define TOOLS_T_CBK(a__T,a__class,a__sclass,a__parent)\
0080 private:\
0081   typedef a__parent parent;\
0082 public:\
0083   TOOLS_T_SCLASS(a__T,a__sclass)\
0084 public:\
0085   virtual void* cast(const std::string& a_class) const {\
0086     if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
0087     return parent::cast(a_class);\
0088   }\
0089   virtual const std::string& s_cls() const {return s_class();}\
0090   virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
0091 
0092 #define TOOLS_T2_CBK(a__T1,a__T2,a__class,a__sclass,a__parent)\
0093 private:\
0094   typedef a__parent parent;\
0095 public:\
0096   TOOLS_T2_SCLASS(a__T1,a__T2,a__sclass)\
0097 public:\
0098   virtual void* cast(const std::string& a_class) const {\
0099     if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
0100     return parent::cast(a_class);\
0101   }\
0102   virtual const std::string& s_cls() const {return s_class();}\
0103   virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
0104 
0105 #define TOOLS_T3_CBK(a__T1,a__T2,a__T3,a__class,a__sclass,a__parent)\
0106 private:\
0107   typedef a__parent parent;\
0108 public:\
0109   TOOLS_T3_SCLASS(a__T1,a__T2,a__T3,a__sclass)\
0110 public:\
0111   virtual void* cast(const std::string& a_class) const {\
0112     if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
0113     return parent::cast(a_class);\
0114   }\
0115   virtual const std::string& s_cls() const {return s_class();}\
0116   virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
0117 
0118 #endif