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 toolx_hdf5_group_exists 4 #ifndef toolx_hdf5_group_exists 5 #define toolx_hdf5_group_exists 5 #define toolx_hdf5_group_exists 6 6 7 #include "hdf5_h" 7 #include "hdf5_h" 8 8 9 #include <string> 9 #include <string> 10 10 11 namespace toolx { 11 namespace toolx { 12 namespace hdf5 { 12 namespace hdf5 { 13 13 14 class group_exists_struct { 14 class group_exists_struct { 15 public: 15 public: 16 group_exists_struct(const std::string& a_wha 16 group_exists_struct(const std::string& a_what):m_what(a_what),m_found(false){} 17 virtual ~group_exists_struct() {} 17 virtual ~group_exists_struct() {} 18 protected: 18 protected: 19 group_exists_struct(const group_exists_struc 19 group_exists_struct(const group_exists_struct& a_from):m_what(a_from.m_what),m_found(a_from.m_found){} 20 group_exists_struct& operator=(const group_e 20 group_exists_struct& operator=(const group_exists_struct&){return *this;} 21 public: 21 public: 22 std::string m_what; 22 std::string m_what; 23 bool m_found; 23 bool m_found; 24 }; 24 }; 25 25 26 inline herr_t group_exists_visit(hid_t a_id,co 26 inline herr_t group_exists_visit(hid_t a_id,const char* a_name,void* a_tag){ //a_id = parent of a_name object. 27 group_exists_struct* visitor = (group_exists 27 group_exists_struct* visitor = (group_exists_struct*)a_tag; 28 H5G_stat_t statbuf; 28 H5G_stat_t statbuf; 29 ::H5Gget_objinfo(a_id,a_name,0,&statbuf); 29 ::H5Gget_objinfo(a_id,a_name,0,&statbuf); 30 switch(statbuf.type) { 30 switch(statbuf.type) { 31 case H5G_GROUP:{ 31 case H5G_GROUP:{ 32 if(a_name==visitor->m_what) {visitor->m_fo 32 if(a_name==visitor->m_what) {visitor->m_found=true;return 0;} //found 33 //::H5Giterate(a_id,a_name,NULL,group_exis 33 //::H5Giterate(a_id,a_name,NULL,group_exists_visit,visitor); 34 }break; 34 }break; 35 default: 35 default: 36 break; 36 break; 37 } 37 } 38 return 0; 38 return 0; 39 } 39 } 40 40 41 inline bool group_exists(hid_t a_file_id,const 41 inline bool group_exists(hid_t a_file_id,const std::string& a_name) { 42 group_exists_struct visitor(a_name); 42 group_exists_struct visitor(a_name); 43 ::H5Giterate(a_file_id,".",NULL,group_exists 43 ::H5Giterate(a_file_id,".",NULL,group_exists_visit,&visitor); 44 return visitor.m_found; 44 return visitor.m_found; 45 } 45 } 46 46 47 }} 47 }} 48 48 49 #endif 49 #endif