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_sg_sf_enum 4 #ifndef tools_sg_sf_enum 5 #define tools_sg_sf_enum 5 #define tools_sg_sf_enum 6 6 7 #include "sf" 7 #include "sf" 8 8 9 namespace tools { 9 namespace tools { 10 namespace sg { 10 namespace sg { 11 11 12 class bsf_enum { 12 class bsf_enum { 13 public: 13 public: 14 TOOLS_SCLASS(tools::sg::bsf_enum); 14 TOOLS_SCLASS(tools::sg::bsf_enum); 15 virtual void* cast(const std::string& a_clas 15 virtual void* cast(const std::string& a_class) const { 16 if(void* p = cmp_cast<bsf_enum>(this,a_cla 16 if(void* p = cmp_cast<bsf_enum>(this,a_class)) {return p;} 17 return 0; 17 return 0; 18 } 18 } 19 virtual const std::string& s_cls() const {re 19 virtual const std::string& s_cls() const {return s_class();} 20 public: 20 public: 21 virtual void set_value(int) = 0; 21 virtual void set_value(int) = 0; 22 public: 22 public: 23 bsf_enum(){} 23 bsf_enum(){} 24 virtual ~bsf_enum(){} 24 virtual ~bsf_enum(){} 25 public: 25 public: 26 bsf_enum(const bsf_enum&){} 26 bsf_enum(const bsf_enum&){} 27 bsf_enum& operator=(const bsf_enum&){return 27 bsf_enum& operator=(const bsf_enum&){return *this;} 28 }; 28 }; 29 29 30 template <class T> 30 template <class T> 31 class sf_enum : public bsf<T>, public bsf_enum 31 class sf_enum : public bsf<T>, public bsf_enum { 32 typedef bsf<T> parent; 32 typedef bsf<T> parent; 33 public: 33 public: 34 TOOLS_T_SCLASS(T,tools::sg::sf_enum); 34 TOOLS_T_SCLASS(T,tools::sg::sf_enum); 35 virtual void* cast(const std::string& a_clas 35 virtual void* cast(const std::string& a_class) const { 36 {if(void* p = cmp_cast< sf_enum<T> >(this,a 36 {if(void* p = cmp_cast< sf_enum<T> >(this,a_class)) {return p;}} 37 {if(void* p = bsf_enum::cast(a_class)) {ret 37 {if(void* p = bsf_enum::cast(a_class)) {return p;}} 38 return parent::cast(a_class); 38 return parent::cast(a_class); 39 } 39 } 40 virtual const std::string& s_cls() const {re 40 virtual const std::string& s_cls() const {return s_class();} 41 public: 41 public: 42 virtual bool write(io::iwbuf& a_buffer) { 42 virtual bool write(io::iwbuf& a_buffer) { 43 return a_buffer.write((int16)parent::m_val 43 return a_buffer.write((int16)parent::m_value); 44 } 44 } 45 virtual bool read(io::irbuf& a_buffer) { 45 virtual bool read(io::irbuf& a_buffer) { 46 int16 v; 46 int16 v; 47 if(!a_buffer.read(v)) return false; 47 if(!a_buffer.read(v)) return false; 48 parent::m_value = (T)v; 48 parent::m_value = (T)v; 49 return true; 49 return true; 50 } 50 } 51 virtual bool dump(std::ostream&) { 51 virtual bool dump(std::ostream&) { 52 //a_out << parent::m_value << std::endl; 52 //a_out << parent::m_value << std::endl; 53 return true; 53 return true; 54 } 54 } 55 virtual bool s_value(std::string& a_s) const 55 virtual bool s_value(std::string& a_s) const {a_s.clear();return false;} 56 virtual bool s2value(const std::string&) {re 56 virtual bool s2value(const std::string&) {return false;} 57 public: 57 public: 58 virtual void set_value(int a_value) {parent: 58 virtual void set_value(int a_value) {parent::value(T(a_value));} 59 public: 59 public: 60 sf_enum():parent(),bsf_enum(){} 60 sf_enum():parent(),bsf_enum(){} 61 sf_enum(const T& a_value):parent(a_value),bs 61 sf_enum(const T& a_value):parent(a_value),bsf_enum(){} 62 virtual ~sf_enum(){} 62 virtual ~sf_enum(){} 63 public: 63 public: 64 sf_enum(const sf_enum& a_from):parent(a_from 64 sf_enum(const sf_enum& a_from):parent(a_from),bsf_enum(a_from){} 65 sf_enum& operator=(const sf_enum& a_from){ 65 sf_enum& operator=(const sf_enum& a_from){ 66 parent::operator=(a_from); 66 parent::operator=(a_from); 67 return *this; 67 return *this; 68 } 68 } 69 public: 69 public: 70 sf_enum& operator=(const T& a_value){ 70 sf_enum& operator=(const T& a_value){ 71 parent::operator=(a_value); 71 parent::operator=(a_value); 72 return *this; 72 return *this; 73 } 73 } 74 }; 74 }; 75 75 76 }} 76 }} 77 77 78 #endif 78 #endif