Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/wroot/base_leaf

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  2 // See the file tools.license for terms.
  3 
  4 #ifndef tools_wroot_base_leaf
  5 #define tools_wroot_base_leaf
  6 
  7 #ifdef TOOLS_MEM
  8 #include "../mem"
  9 #endif
 10 
 11 #include "named"
 12 
 13 #include "cids"
 14 #include "../scast"
 15 
 16 namespace tools {
 17 namespace wroot {
 18 
 19 class base_leaf : public virtual ibo {
 20   static unsigned int kNullTag() {return 0;}
 21 #ifdef TOOLS_MEM
 22 public:
 23   static const std::string& s_class() {
 24     static const std::string s_v("tools::wroot::base_leaf");
 25     return s_v;
 26   }
 27 #endif
 28 public:
 29   static cid id_class() {return base_leaf_cid();}
 30   virtual void* cast(cid a_class) const {
 31     if(void* p = cmp_cast<base_leaf>(this,a_class)) {return p;}
 32     else return 0;
 33   }
 34   virtual cid id_cls() const {return id_class();}
 35 public: //ibo
 36   virtual bool stream(buffer& a_buffer) const {
 37     //::printf("debug : base_leaf::stream %s\n",m_name.c_str());
 38     //::printf("debug :   m_length %d\n",m_length);
 39     //::printf("debug :   m_is_range %d\n",m_is_range);
 40     //::printf("debug :   m_leaf_count %lu\n",m_leaf_count);
 41     unsigned int c;
 42     if(!a_buffer.write_version(2,c)) return false;
 43     if(!Named_stream(a_buffer,m_name,m_title)) return false;
 44     if(!a_buffer.write(m_length)) return false;
 45     if(!a_buffer.write(m_length_type)) return false;
 46     uint32 fOffset = 0;
 47     if(!a_buffer.write(fOffset)) return false;
 48     if(!a_buffer.write(m_is_range)) return false;
 49     bool fIsUnsigned = false;
 50     if(!a_buffer.write(fIsUnsigned)) return false;
 51 
 52     if(m_leaf_count) {
 53       if(!a_buffer.write_object(*m_leaf_count)) return false;
 54     } else {
 55       if(!a_buffer.write(kNullTag())) return false;
 56     }
 57 
 58     if(!a_buffer.set_byte_count(c)) return false;
 59     return true;
 60   }
 61 public:
 62   virtual bool fill_buffer(buffer&) const = 0;
 63 public:
 64   base_leaf(std::ostream& a_out,const std::string& a_name,const std::string& a_title)
 65   :m_out(a_out)
 66   ,m_name(a_name)
 67   ,m_title(a_title)
 68 
 69   ,m_length(0)
 70   ,m_length_type(0)
 71   ,m_leaf_count(0)
 72   ,m_is_range(false)
 73   {
 74 #ifdef TOOLS_MEM
 75     mem::increment(s_class().c_str());
 76 #endif
 77   }
 78   virtual ~base_leaf(){
 79 #ifdef TOOLS_MEM
 80     mem::decrement(s_class().c_str());
 81 #endif
 82   }
 83 protected:
 84   base_leaf(const base_leaf& a_from)
 85   :ibo(a_from)
 86   ,m_out(a_from.m_out)
 87   ,m_length(0)
 88   ,m_length_type(0)
 89   ,m_leaf_count(0)
 90   ,m_is_range(false)
 91   {}
 92   base_leaf& operator=(const base_leaf&){return *this;}
 93 public:
 94   const std::string& name() const {return m_name;}
 95   //const std::string& title() const {return m_title;}
 96   void set_title(const std::string& a_value) {m_title = a_value;}
 97   uint32 length() const {return m_length;}
 98   void set_length(uint32 a_value) {m_length = a_value;}
 99   void set_is_range(bool a_value) {m_is_range = a_value;}
100 protected:
101   std::ostream& m_out;
102 protected: //Named
103   std::string m_name;
104   std::string m_title;
105   uint32 m_length;          //  Number of fixed length elements
106   uint32 m_length_type;     //  Number of bytes for this data type
107   ibo* m_leaf_count;
108   bool m_is_range;
109 };
110 
111 }}
112 
113 #endif