Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_rroot_tree_index 5 #define tools_rroot_tree_index 6 7 #include "named" 8 9 namespace tools { 10 namespace rroot { 11 12 class tree_index : public virtual iro { 13 static const std::string& s_store_class() { 14 static const std::string s_v("TTreeIndex"); 15 return s_v; 16 } 17 public: 18 static const std::string& s_class() { 19 static const std::string s_v("tools::rroot::tree_index"); 20 return s_v; 21 } 22 public: //iro 23 virtual void* cast(const std::string& a_class) const { 24 if(void* p = cmp_cast<tree_index>(this,a_class)) return p; 25 return 0; 26 } 27 virtual const std::string& s_cls() const {return s_class();} 28 public: 29 static cid id_class() {return branch_cid();} 30 virtual void* cast(cid a_class) const { 31 if(void* p = cmp_cast<tree_index>(this,a_class)) {return p;} 32 else return 0; 33 } 34 public: 35 virtual iro* copy() const {return new tree_index(*this);} 36 virtual bool stream(buffer& a_buffer) { 37 uint32 startpos = a_buffer.length(); 38 39 unsigned int _s,_c; 40 short v; 41 if(!a_buffer.read_version(v,_s,_c)) return false; 42 //::printf("debug : tree_index::stream : version %d count %d\n",v,c); 43 44 if(!virtual_index_stream(a_buffer)) return false; 45 46 std::string ds; 47 if(!a_buffer.read(ds)) return false; //fMajorName 48 //::printf("debug : tree_index::stream : fMajorName \"%s\"\n",ds.c_str()); 49 if(!a_buffer.read(ds)) return false; //fMinorName 50 //::printf("debug : tree_index::stream : fMinorName \"%s\"\n",ds.c_str()); 51 52 int64 m_n; 53 if(!a_buffer.read(m_n)) return false; //fN 54 //::printf("debug : tree_index::stream : fN %ld\n",m_n); 55 56 if(!dummy_array_stream<int64>(a_buffer,int(m_n))) return false; 57 if(!dummy_array_stream<int64>(a_buffer,int(m_n))) return false; 58 59 //FIXME : still problem with this streamer. 60 61 a_buffer.set_offset(startpos+_c+sizeof(unsigned int)); 62 63 if(!a_buffer.check_byte_count(_s,_c,s_store_class())) return false; 64 65 //::printf("debug : tree_index::stream : ok\n"); 66 return true; 67 } 68 69 public: 70 tree_index() 71 { 72 #ifdef TOOLS_MEM 73 mem::increment(s_class().c_str()); 74 #endif 75 } 76 virtual ~tree_index(){ 77 #ifdef TOOLS_MEM 78 mem::decrement(s_class().c_str()); 79 #endif 80 } 81 protected: 82 tree_index(const tree_index& a_from):iro(a_from){} 83 tree_index& operator=(const tree_index&){return *this;} 84 protected: 85 static const std::string& virtual_index_s_store_class() { 86 static const std::string s_v("TVirtualIndex"); 87 return s_v; 88 } 89 bool virtual_index_stream(buffer& a_buffer){ 90 short v; 91 unsigned int _s,_c; 92 if(!a_buffer.read_version(v,_s,_c)) return false; 93 //::printf("debug : virtual_index::stream : version %d count %d\n",v,c); 94 std::string ds; 95 if(!Named_stream(a_buffer,ds,ds)) return false; 96 if(!a_buffer.check_byte_count(_s,_c,virtual_index_s_store_class())) 97 return false; 98 return true; 99 } 100 101 }; 102 103 }} 104 105 #endif