Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_HEADER 4 #ifndef tools_HEADER 5 #define tools_HEADER 5 #define tools_HEADER 6 6 7 #include "S_STRING" 7 #include "S_STRING" 8 #include "scast" 8 #include "scast" 9 9 10 #define TOOLS_HEADER(a__class,a__sclass,a__par 10 #define TOOLS_HEADER(a__class,a__sclass,a__parent)\ 11 private:\ 11 private:\ 12 typedef a__parent parent;\ 12 typedef a__parent parent;\ 13 public:\ 13 public:\ 14 TOOLS_SCLASS(a__sclass)\ 14 TOOLS_SCLASS(a__sclass)\ 15 /*public:\ 15 /*public:\ 16 static bool is_a(const std::string& a_class) 16 static bool is_a(const std::string& a_class) {\ 17 if(!rcmp(a_class,s_class())) return true;\ 17 if(!rcmp(a_class,s_class())) return true;\ 18 return parent::is_a(a_class);\ 18 return parent::is_a(a_class);\ 19 }*/\ 19 }*/\ 20 public:\ 20 public:\ 21 virtual void* cast(const std::string& a_clas 21 virtual void* cast(const std::string& a_class) const {\ 22 if(void* p = tools::cmp_cast<a__class>(thi 22 if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\ 23 return parent::cast(a_class);\ 23 return parent::cast(a_class);\ 24 }\ 24 }\ 25 virtual const std::string& s_cls() const {re 25 virtual const std::string& s_cls() const {return s_class();} 26 26 27 #define TOOLS_HEADER_COPY(a__class,a__sclass,a 27 #define TOOLS_HEADER_COPY(a__class,a__sclass,a__parent,a__to)\ 28 TOOLS_HEADER(a__class,a__sclass,a__parent)\ 28 TOOLS_HEADER(a__class,a__sclass,a__parent)\ 29 virtual a__to* copy() const {return new a__c 29 virtual a__to* copy() const {return new a__class(*this);} 30 30 31 #define TOOLS_T_HEADER(a__T,a__class,a__sclass 31 #define TOOLS_T_HEADER(a__T,a__class,a__sclass,a__parent)\ 32 private:\ 32 private:\ 33 typedef a__parent parent;\ 33 typedef a__parent parent;\ 34 public:\ 34 public:\ 35 TOOLS_T_SCLASS(a__T,a__sclass)\ 35 TOOLS_T_SCLASS(a__T,a__sclass)\ 36 public:\ 36 public:\ 37 virtual void* cast(const std::string& a_clas 37 virtual void* cast(const std::string& a_class) const {\ 38 if(void* p = tools::cmp_cast<a__class>(thi 38 if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\ 39 return parent::cast(a_class);\ 39 return parent::cast(a_class);\ 40 }\ 40 }\ 41 virtual const std::string& s_cls() const {re 41 virtual const std::string& s_cls() const {return s_class();} 42 42 43 #endif 43 #endif