Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/toolx/hdf5/pages

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/toolx/hdf5/pages (Version 11.3.0) and /externals/g4tools/include/toolx/hdf5/pages (Version 6.0)


  1 // Copyright (C) 2010, Guy Barrand. All rights    
  2 // See the file tools.license for terms.          
  3                                                   
  4 #ifndef toolx_hdf5_pages                          
  5 #define toolx_hdf5_pages                          
  6                                                   
  7 #include "T_tools"                                
  8 #include "tools"                                  
  9                                                   
 10 #include <tools/S_STRING>                         
 11                                                   
 12 #ifdef TOOLS_MEM                                  
 13 #include <tools/mem>                              
 14 #endif                                            
 15                                                   
 16 #include <ostream>                                
 17                                                   
 18 namespace toolx {                                 
 19 namespace hdf5 {                                  
 20                                                   
 21 TOOLS_GLOBAL_STRING(pages)                        
 22 TOOLS_GLOBAL_STRING(entries)                      
 23 TOOLS_GLOBAL_STRING(columns)                      
 24 TOOLS_GLOBAL_STRING(names)                        
 25 TOOLS_GLOBAL_STRING(forms)                        
 26                                                   
 27 class pages {                                     
 28   TOOLS_SCLASS(toolx::hdf5::pages)                
 29 public:                                           
 30   pages(std::ostream& a_out,                      
 31         hid_t a_group,const std::string& a_nam    
 32         bool a_write,unsigned int a_compress)     
 33   :m_out(a_out),m_name(a_name),m_form(a_form)     
 34   //,m_type(0),m_size(0)                          
 35   ,m_group(-1),m_dataset(-1),m_write(a_write),    
 36 #ifdef TOOLS_MEM                                  
 37     tools::mem::increment(s_class().c_str());     
 38 #endif                                            
 39     if(m_write) {                                 
 40       m_group = toolx_H5Gcreate(a_group,m_name    
 41       if(m_group<0) {                             
 42         m_out << "pages::pages : can't create     
 43         m_group = -1;                             
 44   return;                                         
 45       }                                           
 46       if(!write_atb(m_group,"class",s_class())    
 47         m_out << "pages::pages : write_atb(cla    
 48         ::H5Gclose(m_group);                      
 49         m_group = -1;                             
 50         return;                                   
 51       }                                           
 52       int v = 1;                                  
 53       if (!write_scalar_atb<int>(m_group,"vers    
 54         m_out << "pages::pages : write_scalar_    
 55         ::H5Gclose(m_group);                      
 56         m_group = -1;                             
 57         return;                                   
 58       }                                           
 59     } else {                                      
 60       m_group = toolx_H5Gopen(a_group,m_name.c    
 61       if(m_group<0) {                             
 62         m_out << "pages::pages : can't open gr    
 63         m_group = -1;                             
 64   return;                                         
 65       }                                           
 66       if(!read_scalar<tools::uint64>(m_group,s    
 67         m_out << "pages::pages : read_scalar(e    
 68         ::H5Gclose(m_group);                      
 69         m_group = -1;                             
 70   return;                                         
 71       }                                           
 72     }                                             
 73   }                                               
 74   virtual ~pages(){                               
 75     if(m_write) {                                 
 76       if(!write_scalar<tools::uint64>(m_group,    
 77         m_out << "pages::~pages : write_scalar    
 78       }                                           
 79       if(m_dataset>=0) ::H5Dclose(m_dataset);     
 80     }                                             
 81     ::H5Gclose(m_group);                          
 82 #ifdef TOOLS_MEM                                  
 83     tools::mem::decrement(s_class().c_str());     
 84 #endif                                            
 85   }                                               
 86 protected:                                        
 87   pages(const pages& a_from):m_out(a_from.m_ou    
 88 #ifdef TOOLS_MEM                                  
 89     tools::mem::increment(s_class().c_str());     
 90 #endif                                            
 91   }                                               
 92   pages& operator=(const pages&){return *this;    
 93 public:                                           
 94   bool is_valid() const {return m_group<0?fals    
 95                                                   
 96   const std::string& name() const {return m_na    
 97   const std::string& form() const {return m_fo    
 98   //int type() const {return m_type;}             
 99   //unsigned int size() const {return m_size;}    
100   tools::uint64 entries() const {return m_entr    
101   tools::uint64 pos() const {return m_pos;}       
102   void reset_pos() {m_pos = 0;}                   
103                                                   
104   template <class TYPE>                           
105   bool write_page(size_t a_size,const TYPE* a_    
106     if(!m_pos) {                                  
107       if(!write_array<TYPE>(m_group,s_pages(),    
108         m_out << "pages::write_page : write_ar    
109         return false;                             
110       }                                           
111       m_dataset = toolx_H5Dopen(m_group,s_page    
112       if(m_dataset<0) {                           
113         m_out << "pages::write_page : H5Dopen     
114         return false;                             
115       }                                           
116     } else {                                      
117       if(!write_append_array_dataset<TYPE>(m_d    
118         m_out << "pages::write_page : write_ap    
119         return false;                             
120       }                                           
121     }                                             
122     m_pos += a_size;                              
123     m_entries = m_pos;                            
124     return true;                                  
125   }                                               
126                                                   
127   template <class TYPE>                           
128   bool read_page(size_t a_size,TYPE* a_array)     
129     //it is assumed that a_array can contain a    
130     unsigned int _size = a_size;                  
131     unsigned int n = 0;                           
132     TYPE* array = 0;                              
133     if(!read_sub_array<TYPE>(m_group,s_pages()    
134       m_out << "pages::read_page : read_sub_ar    
135       return false;                               
136     }                                             
137     if(n!=_size) {                                
138       m_out << "pages::read_page : size mismat    
139       delete [] array;                            
140       return false;                               
141     }                                             
142                                                   
143    {TYPE* rpos = (TYPE*)array;                    
144     TYPE* wpos = (TYPE*)a_array;                  
145     for(size_t i=0;i<n;i++,rpos++,wpos++) *wpo    
146     for(size_t i=n;i<_size;i++,rpos++,wpos++)     
147                                                   
148     delete [] array;                              
149                                                   
150     m_pos += n;                                   
151     return true;                                  
152   }                                               
153                                                   
154   template <class TYPE>                           
155   bool write_vlen(size_t a_size,const TYPE* a_    
156     if(!m_pos) {                                  
157       if(!hdf5::write_vlen<TYPE>(m_group,s_pag    
158         m_out << "pages::write_vlen : write_vl    
159         return false;                             
160       }                                           
161       m_dataset = toolx_H5Dopen(m_group,s_page    
162       if(m_dataset<0) {                           
163         m_out << "pages::write_vlen : H5Dopen     
164         return false;                             
165       }                                           
166     } else {                                      
167       if(!write_append_vlen_dataset<TYPE>(m_da    
168         m_out << "pages::write_vlen : write_ap    
169         return false;                             
170       }                                           
171     }                                             
172     m_pos++;                                      
173     m_entries++;                                  
174     return true;                                  
175   }                                               
176                                                   
177   template <class TYPE>                           
178   bool read_vlen(size_t& a_size,TYPE*& a_array    
179     //it is assumed that a_array can contain a    
180     unsigned int sz;                              
181     if(!read_sub_vlen<TYPE>(m_group,s_pages(),    
182       m_out << "pages::read_vlen : read_sub_vl    
183       a_size = 0;                                 
184       a_array = 0;                                
185       return false;                               
186     }                                             
187     a_size = sz;                                  
188     m_pos++;                                      
189     m_entries++;                                  
190     return true;                                  
191   }                                               
192                                                   
193   bool write_string(const std::string& a_strin    
194     if(!m_pos) {                                  
195       if(!hdf5::write_string_dataset(m_group,s    
196         m_out << "pages::write_string : hdf5::    
197         return false;                             
198       }                                           
199       m_dataset = toolx_H5Dopen(m_group,s_page    
200       if(m_dataset<0) {                           
201         m_out << "pages::write_string : H5Dope    
202         return false;                             
203       }                                           
204     } else {                                      
205       if(!write_append_string_dataset(m_datase    
206         m_out << "pages::write_string : write_    
207         return false;                             
208       }                                           
209     }                                             
210     m_pos++;                                      
211     m_entries++;                                  
212     return true;                                  
213   }                                               
214                                                   
215   bool read_string(std::string& a_string) {       
216     if(!read_sub_string(m_group,s_pages(),(uns    
217       m_out << "pages::read_string : read_sub_    
218       a_string.clear();                           
219       return false;                               
220     }                                             
221     m_pos++;                                      
222     m_entries++;                                  
223     return true;                                  
224   }                                               
225                                                   
226 /*                                                
227   bool write_string(const std::string& a_strin    
228                                                   
229   bool read_string(std::string& a_string) {       
230     size_t sz;char* _data;                        
231     if(!read_vlen<char>(sz,_data)) {a_string.c    
232     a_string.resize(sz);                          
233     for(size_t index=0;index<sz;index++) a_str    
234     delete [] _data;                              
235     return true;                                  
236   }                                               
237 */                                                
238                                                   
239 /*                                                
240   bool write_strings(size_t a_number,void* a_a    
241     size_t sz = m_size*a_number;                  
242     char* buffer = new char[sz];                  
243    {char* pos = buffer;                           
244     for(size_t index=0;index<sz;index++,pos++)    
245                                                   
246    {char** strings = (char**)a_array;             
247     char* pos = buffer;                           
248     size_t ls;                                    
249     for(size_t index=0;index<a_number;index++)    
250       char* ss = strings[index];                  
251       ls = ::strlen(ss);                          
252       ::memcpy(pos,ss,ls); //do not copy the e    
253       *(pos+m_size-1) = 0;                        
254       pos += m_size;                              
255     }}                                            
256                                                   
257     if(!m_pos) {                                  
258       unsigned int chunked = 32*m_size; //<siz    
259       if(!write_array<char>(m_group,s_pages(),    
260         m_out << "pages::write_strings : write    
261         return false;                             
262       }                                           
263       m_dataset = toolx_H5Dopen(m_group,s_page    
264       if(m_dataset<0) {                           
265         m_out << "pages::write_strings : H5Dop    
266         return false;                             
267       }                                           
268     } else {                                      
269       if(!write_append_array_dataset<char>(m_d    
270         m_out << "pages::write_strings : write    
271         return false;                             
272       }                                           
273     }                                             
274     m_pos += a_number;                            
275     m_entries = m_pos;                            
276     return true;                                  
277   }                                               
278                                                   
279   bool read_strings(size_t a_size,char* a_arra    
280     unsigned int _size = a_size*m_size;           
281     unsigned int n = 0;                           
282     char* array = 0;                              
283     if(!read_sub_array<char>(m_group,s_pages()    
284       m_out << "pages::read_strings : read_sub    
285       return false;                               
286     }                                             
287     if(n!=_size) {                                
288       m_out << "pages::read_strings : size mis    
289       delete [] array;                            
290       return false;                               
291     }                                             
292     char* pos = array;                            
293    {char** strings = (char**)a_array;             
294     for(size_t index=0;index<a_size;index++) {    
295       ::memcpy(strings[index],pos,m_size*sizeo    
296       pos += m_size;                              
297     }}                                            
298     delete [] array;                              
299     m_pos += n;                                   
300     return true;                                  
301   }                                               
302 */                                                
303 protected:                                        
304   std::ostream& m_out;                            
305   std::string m_name;                             
306   std::string m_form;                             
307   //int m_type;                                   
308   //unsigned int m_size;                          
309   hid_t m_group;                                  
310   hid_t m_dataset;                                
311   bool m_write;                                   
312   unsigned int m_compress; //if write.            
313   tools::uint64 m_entries;                        
314   tools::uint64 m_pos;                            
315 };                                                
316                                                   
317 }}                                                
318                                                   
319 #endif