Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef toolx_hdf5_group_exists 5 #define toolx_hdf5_group_exists 6 7 #include "hdf5_h" 8 9 #include <string> 10 11 namespace toolx { 12 namespace hdf5 { 13 14 class group_exists_struct { 15 public: 16 group_exists_struct(const std::string& a_what):m_what(a_what),m_found(false){} 17 virtual ~group_exists_struct() {} 18 protected: 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_exists_struct&){return *this;} 21 public: 22 std::string m_what; 23 bool m_found; 24 }; 25 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_struct*)a_tag; 28 H5G_stat_t statbuf; 29 ::H5Gget_objinfo(a_id,a_name,0,&statbuf); 30 switch(statbuf.type) { 31 case H5G_GROUP:{ 32 if(a_name==visitor->m_what) {visitor->m_found=true;return 0;} //found 33 //::H5Giterate(a_id,a_name,NULL,group_exists_visit,visitor); 34 }break; 35 default: 36 break; 37 } 38 return 0; 39 } 40 41 inline bool group_exists(hid_t a_file_id,const std::string& a_name) { 42 group_exists_struct visitor(a_name); 43 ::H5Giterate(a_file_id,".",NULL,group_exists_visit,&visitor); 44 return visitor.m_found; 45 } 46 47 }} 48 49 #endif