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