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_matrix 5 #define tools_rroot_matrix 6 7 //NOTE : not yet tested. 8 9 #include "../scast" 10 #include "buffer" 11 #include "named" 12 13 namespace tools { 14 namespace rroot { 15 16 class matrix : public virtual iro { 17 static const std::string& s_store_class() { 18 static const std::string s_v("TMatrix"); 19 return s_v; 20 } 21 public: 22 static const std::string& s_class() { 23 static const std::string s_v("tools::rroot::matrix"); 24 return s_v; 25 } 26 public: //iro 27 virtual void* cast(const std::string& a_class) const { 28 if(void* p = cmp_cast<matrix>(this,a_class)) return p; 29 return 0; 30 } 31 virtual const std::string& s_cls() const {return s_class();} 32 virtual iro* copy() const {return new matrix(*this);} 33 public: 34 static cid id_class() {return matrix_cid();} 35 virtual void* cast(cid a_class) const { 36 if(void* p = cmp_cast<matrix>(this,a_class)) {return p;} 37 else return 0; 38 } 39 public: 40 virtual bool stream(buffer& a_buffer) { 41 unsigned int _s,_c; 42 short v; 43 if(!a_buffer.read_version(v,_s,_c)) return false; 44 45 //printf("debug : tools::rroot::matrix::stream : version %d\n",v); 46 47 // Version 2 streaming (ROOT/v3-00-6). 48 49 {uint32 id,bits; 50 if(!Object_stream(a_buffer,id,bits)) return false;} 51 52 int Nrows; 53 if(!a_buffer.read(Nrows)) return false; 54 int Ncols; 55 if(!a_buffer.read(Ncols)) return false; 56 int Nelems; 57 if(!a_buffer.read(Nelems)) return false; 58 int RowLwb; 59 if(!a_buffer.read(RowLwb)) return false; 60 int ColLwb; 61 if(!a_buffer.read(ColLwb)) return false; 62 63 //Real_t* Elements; //[fNelems] 64 if(!dummy_array_stream<float>(a_buffer,Nelems)) return false; 65 66 if(!a_buffer.check_byte_count(_s,_c,s_store_class())) return false; 67 return true; 68 } 69 70 public: 71 matrix(){ 72 #ifdef TOOLS_MEM 73 mem::increment(s_class().c_str()); 74 #endif 75 } 76 virtual ~matrix(){ 77 #ifdef TOOLS_MEM 78 mem::decrement(s_class().c_str()); 79 #endif 80 } 81 protected: 82 matrix(const matrix& a_from): iro(a_from){} 83 matrix& operator=(const matrix&){return *this;} 84 }; 85 86 }} 87 88 #endif