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