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