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_atb 5 #define toolx_hdf5_atb 6 7 // The below is internal methods in the HDF5 lib. 8 9 #include "hdf5_h" 10 11 #include <cstring> 12 13 namespace toolx { 14 namespace hdf5 { 15 16 inline herr_t H5LT_get_attribute_mem(hid_t obj_id,const char *attr_name,hid_t mem_type_id,void *data ) { 17 hid_t attr_id; 18 if ( ( attr_id = ::H5Aopen_name( obj_id, attr_name ) ) < 0 ) return -1; 19 if ( ::H5Aread( attr_id, mem_type_id, data ) < 0 ) { 20 ::H5Aclose( attr_id ); 21 return -1; 22 } 23 if ( ::H5Aclose( attr_id ) < 0 ) return -1; 24 return 0; 25 } 26 27 inline herr_t find_attr( hid_t loc_id, const char *name, void *op_data) { 28 int ret = 0; 29 char *attr_name = (char*)op_data; 30 if( ::strcmp( name, attr_name ) == 0 ) ret = 1; 31 (void)loc_id; 32 return ret; 33 } 34 35 inline herr_t H5LT_find_attribute( hid_t loc_id, const char* attr_name ) { 36 unsigned int attr_num; 37 attr_num = 0; 38 return toolx_H5Aiterate( loc_id, &attr_num, find_attr, (void *)attr_name ); 39 } 40 41 inline herr_t H5LT_get_attribute_disk( hid_t loc_id,const char *attr_name,void *attr_out ) { 42 hid_t attr_id; 43 if ( ( attr_id = ::H5Aopen_name( loc_id, attr_name ) ) < 0 ) return -1; 44 45 hid_t attr_type; 46 if ( (attr_type = ::H5Aget_type( attr_id )) < 0 ) { 47 ::H5Tclose( attr_type ); 48 ::H5Aclose( attr_id ); 49 return -1; 50 } 51 52 if ( ::H5Aread( attr_id, attr_type, attr_out ) < 0 ) { 53 ::H5Tclose( attr_type ); 54 ::H5Aclose( attr_id ); 55 return -1; 56 } 57 58 if ( ::H5Tclose( attr_type ) < 0 ) { 59 ::H5Tclose( attr_type ); 60 ::H5Aclose( attr_id ); 61 return -1; 62 } 63 64 if ( ::H5Aclose( attr_id ) < 0 ) return -1; 65 66 return 0; 67 68 } 69 70 }} 71 72 #endif