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