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