Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/Geant4/tools/wroot/named is written in an unsupported language. File is not indexed.

0001 // Copyright (C) 2010, Guy Barrand. All rights reserved.
0002 // See the file tools.license for terms.
0003 
0004 #ifndef tools_wroot_named
0005 #define tools_wroot_named
0006 
0007 #include "buffer"
0008 #include "../vmanip"
0009 
0010 namespace tools {
0011 namespace wroot {
0012 
0013 inline bool Object_stream(buffer& a_buffer) {
0014   short v = 1;
0015   if(!a_buffer.write_version(v)) return false;
0016   if(!a_buffer.write((unsigned int)0)) return false;
0017   static const unsigned int kNotDeleted = 0x02000000;
0018   if(!a_buffer.write(kNotDeleted)) return false;
0019   return true;
0020 }
0021 
0022 inline bool Named_stream(buffer& a_buffer,const std::string& a_name,const std::string& a_title) {
0023   unsigned int beg;
0024   if(!a_buffer.write_version(1,beg)) return false;
0025   if(!Object_stream(a_buffer)) return false;
0026   if(!a_buffer.write(a_name)) return false;
0027   if(!a_buffer.write(a_title)) return false;
0028   if(!a_buffer.set_byte_count(beg)) return false;
0029   return true;
0030 }
0031 
0032 template <class T>
0033 class obj_array : public virtual ibo, public std::vector<T*> {
0034   static unsigned int kNullTag() {return 0;}
0035 public: //ibo
0036   virtual const std::string& store_cls() const {
0037     static const std::string s_v("TObjArray");
0038     return s_v;
0039   }
0040   virtual bool stream(buffer& a_buffer) const {
0041     unsigned int c;
0042     if(!a_buffer.write_version(3,c)) return false;
0043     if(!Object_stream(a_buffer)) return false;
0044     if(!a_buffer.write(std::string(""))) return false;
0045     int nobjects = int(std::vector<T*>::size());
0046     if(!a_buffer.write(nobjects)) return false;
0047     int lowerBound = 0;
0048     if(!a_buffer.write(lowerBound)) return false;
0049 
0050     typedef typename std::vector<T*>::const_iterator it_t;
0051     it_t it;
0052     for(it=std::vector<T*>::begin();it!=std::vector<T*>::end();++it) {
0053       if(*it) {
0054         if(!a_buffer.write_object(*(*it))) return false;
0055       } else { //Could happen with branch::m_baskets.
0056         if(!a_buffer.write(kNullTag())) return false;
0057       }
0058     }
0059     if(!a_buffer.set_byte_count(c)) return false;
0060     return true;
0061   }
0062 public:
0063   obj_array(){}
0064   virtual ~obj_array(){safe_clear<T>(*this);}
0065 public:
0066   obj_array(const obj_array& a_from): ibo(a_from),std::vector<T*>() {
0067     typedef typename std::vector<T*>::const_iterator it_t;
0068     it_t it;
0069     for(it=a_from.begin();it!=a_from.end();++it) {
0070       std::vector<T*>::push_back((*it)->copy());
0071     }
0072   }
0073   obj_array& operator=(const obj_array& a_from){
0074     if(&a_from==this) return *this;
0075     safe_clear<T>(*this);
0076 
0077     typedef typename std::vector<T*>::const_iterator it_t;
0078     it_t it;
0079     for(it=a_from.begin();it!=a_from.end();++it) {
0080       std::vector<T*>::push_back((*it)->copy());
0081     }
0082     return *this;
0083   }
0084 public:
0085   void clear_objs() {safe_clear<T>(*this);}
0086 };
0087 
0088 template <class T>
0089 class obj_list : public virtual ibo, public std::vector<T*> {
0090 public: //ibo
0091   virtual const std::string& store_cls() const {
0092     static const std::string s_v("TList");
0093     return s_v;
0094   }
0095   virtual bool stream(buffer& a_buffer) const {
0096     unsigned int c;
0097     if(!a_buffer.write_version(4,c)) return false;
0098     if(!Object_stream(a_buffer)) return false;
0099     if(!a_buffer.write(std::string(""))) return false; //fName
0100     int nobjects = int(std::vector<T*>::size());
0101     if(!a_buffer.write(nobjects)) return false;
0102 
0103     typedef typename std::vector<T*>::const_iterator it_t;
0104     it_t it;
0105     for(it=std::vector<T*>::begin();it!=std::vector<T*>::end();++it) {
0106       if(!a_buffer.write_object(*(*it))) return false;
0107       std::string opt;
0108       unsigned char nch = (unsigned char)opt.size();
0109       if(!a_buffer.write(nch)) return false;
0110       if(!a_buffer.write_fast_array<char>(opt.c_str(),nch)) return false;
0111     }
0112     if(!a_buffer.set_byte_count(c)) return false;
0113     return true;
0114   }
0115 public:
0116   obj_list(){}
0117   virtual ~obj_list(){safe_clear<T>(*this);}
0118 protected:
0119   obj_list(const obj_list& a_from):ibo(a_from),std::vector<T*>(){}
0120   obj_list& operator=(const obj_list&){return *this;}
0121 };
0122 
0123 inline bool AttLine_stream(buffer& a_buffer){
0124   short fLineColor = 1;
0125   short fLineStyle = 1;
0126   short fLineWidth = 1;
0127   unsigned int c;
0128   if(!a_buffer.write_version(1,c)) return false;
0129   if(!a_buffer.write(fLineColor)) return false;
0130   if(!a_buffer.write(fLineStyle)) return false;
0131   if(!a_buffer.write(fLineWidth)) return false;
0132   if(!a_buffer.set_byte_count(c)) return false;
0133   return true;
0134 }
0135 
0136 inline bool AttFill_stream(buffer& a_buffer){
0137   short fFillColor = 0;
0138   short fFillStyle = 101;
0139   unsigned int c;
0140   if(!a_buffer.write_version(1,c)) return false;
0141   if(!a_buffer.write(fFillColor)) return false;
0142   if(!a_buffer.write(fFillStyle)) return false;
0143   if(!a_buffer.set_byte_count(c)) return false;
0144   return true;
0145 }
0146 
0147 inline bool AttMarker_stream(buffer& a_buffer) {
0148   short fMarkerColor = 1;
0149   short fMarkerStyle = 1;
0150   float fMarkerWidth = 1;
0151   unsigned int c;
0152   if(!a_buffer.write_version(1,c)) return false;
0153   if(!a_buffer.write(fMarkerColor)) return false;
0154   if(!a_buffer.write(fMarkerStyle)) return false;
0155   if(!a_buffer.write(fMarkerWidth)) return false;
0156   if(!a_buffer.set_byte_count(c)) return false;
0157   return true;
0158 }
0159 
0160 inline bool Att3D_stream(buffer& a_buffer){
0161   unsigned int c;
0162   if(!a_buffer.write_version(1,c)) return false;
0163   if(!a_buffer.set_byte_count(c)) return false;
0164   return true;
0165 }
0166 
0167 }}
0168 
0169 #endif