diff --git a/src/H5Block.c b/src/H5Block.c index c2cef14..6eb9b59 100644 --- a/src/H5Block.c +++ b/src/H5Block.c @@ -832,11 +832,11 @@ H5BlockGet3DChunkDims( h5part_int64_t herr = _H5Block_open_field_group ( f, field_name ); if ( herr < 0 ) return herr; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t dataset_id = H5Dopen2 ( b->field_group_id, "0", H5P_DEFAULT ); -#else - hid_t dataset_id = H5Dopen ( b->field_group_id, "0" ); + hid_t dataset_id = H5Dopen ( b->field_group_id, "0" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( field_name ); hid_t plist_id = H5Dget_create_plist (dataset_id); @@ -1003,14 +1003,13 @@ _open_block_group ( } if ( b->blockgroup < 0 ) { -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t herr = H5Gopen2 ( + hid_t herr = H5Gopen ( f->timegroup, - H5BLOCK_GROUPNAME_BLOCK, - H5P_DEFAULT ); -#else - hid_t herr = H5Gopen ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK ); + H5BLOCK_GROUPNAME_BLOCK +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( herr < 0 ) return HANDLE_H5G_OPEN_ERR ( H5BLOCK_GROUPNAME_BLOCK ); b->blockgroup = herr; } @@ -1042,11 +1041,11 @@ _H5Block_open_field_group ( if ( ! _H5Part_have_group ( b->blockgroup, name ) ) return HANDLE_H5PART_NOENT_ERR ( name ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - herr_t herr = H5Gopen2 ( b->blockgroup, name, H5P_DEFAULT ); -#else - herr_t herr = H5Gopen ( b->blockgroup, name ); + herr_t herr = H5Gopen ( b->blockgroup, name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( herr < 0 ) return HANDLE_H5G_OPEN_ERR ( name ); b->field_group_id = herr; @@ -1177,11 +1176,11 @@ _H5Block_read_data ( h5part_int64_t herr; struct H5BlockStruct *b = f->block; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t dataset_id = H5Dopen2 ( b->field_group_id, name, H5P_DEFAULT ); -#else - hid_t dataset_id = H5Dopen ( b->field_group_id, name ); + hid_t dataset_id = H5Dopen ( b->field_group_id, name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( name ); herr = _H5Block_select_hyperslab_for_reading ( f, dataset_id ); @@ -1341,16 +1340,17 @@ _create_block_group ( f->block->blockgroup = -1; } -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - herr = H5Gcreate2 ( - f->timegroup, - H5BLOCK_GROUPNAME_BLOCK, - H5P_DEFAULT, - H5P_DEFAULT, - H5P_DEFAULT ); + herr = H5Gcreate ( + f->timegroup, + H5BLOCK_GROUPNAME_BLOCK, +#ifndef H5_USE_16_API + H5P_DEFAULT, + H5P_DEFAULT, + H5P_DEFAULT #else - herr = H5Gcreate ( f->timegroup, H5BLOCK_GROUPNAME_BLOCK, 0 ); + 0 #endif + ); if ( herr < 0 ) return HANDLE_H5G_CREATE_ERR ( H5BLOCK_GROUPNAME_BLOCK ); f->block->blockgroup = herr; @@ -1387,16 +1387,17 @@ _H5Block_create_field_group ( if ( _H5Part_have_group ( b->blockgroup, name ) ) return HANDLE_H5PART_GROUP_EXISTS_ERR ( name ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - herr_t herr = H5Gcreate2 ( - b->blockgroup, - name, - H5P_DEFAULT, - H5P_DEFAULT, - H5P_DEFAULT ); + herr_t herr = H5Gcreate ( + b->blockgroup, + name, +#ifndef H5_USE_16_API + H5P_DEFAULT, + H5P_DEFAULT, + H5P_DEFAULT #else - herr_t herr = H5Gcreate ( b->blockgroup, name, 0 ); + 0 #endif + ); if ( herr < 0 ) return HANDLE_H5G_CREATE_ERR ( name ); b->field_group_id = herr; @@ -1422,26 +1423,24 @@ _H5Block_write_data ( hid_t dataset; struct H5BlockStruct *b = f->block; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API htri_t exists = H5Lexists ( b->field_group_id, name, H5P_DEFAULT ); if ( exists > 0 ) return HANDLE_H5D_EXISTS_ERR ( name, f->timestep ); +#endif - dataset = H5Dcreate2 ( - b->field_group_id, - name, - type, - b->shape, - H5P_DEFAULT, - b->create_prop, - H5P_DEFAULT ); -#else dataset = H5Dcreate ( b->field_group_id, name, type, b->shape, - b->create_prop ); +#ifndef H5_USE_16_API + H5P_DEFAULT, + b->create_prop, + H5P_DEFAULT +#else + b->create_prop #endif + ); if ( dataset < 0 ) return HANDLE_H5D_CREATE_ERR ( name, f->timestep ); herr = H5Dwrite ( @@ -1505,21 +1504,20 @@ _get_field_info ( h5part_int64_t herr = _open_block_group ( f ); if ( herr < 0 ) return herr; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t group_id = H5Gopen2 ( - f->block->blockgroup, - field_name, - H5P_DEFAULT ); -#else - hid_t group_id = H5Gopen ( f->block->blockgroup, field_name ); + hid_t group_id = H5Gopen ( + f->block->blockgroup, + field_name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR ( field_name ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t dataset_id = H5Dopen2 ( group_id, "0", H5P_DEFAULT ); -#else - hid_t dataset_id = H5Dopen ( group_id, "0" ); + hid_t dataset_id = H5Dopen ( group_id, "0" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( "0" ); hid_t dataspace_id = H5Dget_space ( dataset_id ); diff --git a/src/H5MultiBlock.c b/src/H5MultiBlock.c index d840278..ae666e2 100644 --- a/src/H5MultiBlock.c +++ b/src/H5MultiBlock.c @@ -838,11 +838,11 @@ _H5MultiBlock_read_data ( herr = _H5Block_open_field_group ( f, field_name ); if ( herr < 0 ) return herr; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - dataset_id = H5Dopen2 ( b->field_group_id, "0", H5P_DEFAULT ); -#else - dataset_id = H5Dopen ( b->field_group_id, "0" ); + dataset_id = H5Dopen ( b->field_group_id, "0" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( "0" ); /* read block dimensions from field attribute */ @@ -1001,23 +1001,19 @@ _H5MultiBlock_write_data ( herr = _H5Block_create_field_group ( f, name ); if ( herr < 0 ) return herr; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - dataset = H5Dcreate2 ( - b->field_group_id, - "0", - type, - b->shape, - H5P_DEFAULT, - b->create_prop, - H5P_DEFAULT ); -#else dataset = H5Dcreate ( b->field_group_id, "0", type, b->shape, - b->create_prop ); +#ifndef H5_USE_16_API + H5P_DEFAULT, + b->create_prop, + H5P_DEFAULT +#else + b->create_prop #endif + ); if ( dataset < 0 ) return HANDLE_H5D_CREATE_ERR ( name, f->timestep ); herr = _H5Part_start_throttle( f ); diff --git a/src/H5Part.c b/src/H5Part.c index 5a685bf..661d852 100644 --- a/src/H5Part.c +++ b/src/H5Part.c @@ -119,7 +119,7 @@ _file_is_valid ( */ static herr_t _h5_error_handler ( -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API hid_t, #endif void * @@ -137,6 +137,7 @@ _H5Part_open_file ( metadata block size, etc. Set to 0 to disable. */ ) { + _h5part_errno = H5PART_SUCCESS; H5PartFile *f = NULL; @@ -236,7 +237,7 @@ _H5Part_open_file ( } f->create_prop = H5Pcreate(H5P_FILE_CREATE); H5Pset_istore_k (f->create_prop, H5PART_BTREE_IK); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API /* defer metadata cache flushing until file close */ H5AC_cache_config_t cache_config; cache_config.version = H5AC__CURR_CACHE_CONFIG_VERSION; @@ -248,7 +249,7 @@ _H5Part_open_file ( cache_config.flash_incr_mode = H5C_flash_incr__off; cache_config.decr_mode = H5C_decr__off; H5Pset_mdc_config (f->access_prop, &cache_config); -#elif +#else _H5Part_print_info ( "Unable to defer metadata write: need HDF5 1.8"); #endif @@ -289,24 +290,24 @@ _H5Part_open_file ( } if ( flags & H5PART_READ ) { - f->file = H5Fopen (filename, H5F_ACC_RDONLY, f->access_prop); + f->file = H5Fopen(filename, H5F_ACC_RDONLY, f->access_prop); } else if ( flags & H5PART_WRITE ){ f->file = H5Fcreate (filename, H5F_ACC_TRUNC, f->create_prop, - f->access_prop); + f->access_prop); f->empty = 1; } else if ( flags & H5PART_APPEND ) { - int fd = open (filename, O_RDONLY, 0); + int fd = open(filename, O_RDONLY, 0); if ( (fd == -1) && (errno == ENOENT) ) { f->file = H5Fcreate(filename, H5F_ACC_TRUNC, - f->create_prop, f->access_prop); + f->create_prop, f->access_prop); f->empty = 1; } else if (fd != -1) { close (fd); - f->file = H5Fopen (filename, H5F_ACC_RDWR, - f->access_prop); + f->file = H5Fopen( + filename, H5F_ACC_RDWR, f->access_prop); /* The following function call returns an error, if f->file < 0. But we can safely ignore this. @@ -651,11 +652,8 @@ H5PartSetNumParticles ( } f->nparticles =(hsize_t) nparticles; #ifndef PARALLEL_IO - f->shape = H5Screate_simple (1, - &(f->nparticles), - NULL); + f->shape = H5Screate_simple (1, &(f->nparticles), NULL); if ( f->shape < 0 ) HANDLE_H5S_CREATE_SIMPLE_ERR ( f->nparticles ); - #else /* PARALLEL_IO */ /* The Gameplan here is to declare the overall size of the on-disk @@ -683,7 +681,7 @@ H5PartSetNumParticles ( _H5Part_print_debug ( "Particle offsets:" ); for(i=0;inprocs;i++) _H5Part_print_debug ( "\t[%d] np=%lld", i, - (long long) f->pnparticles[i] ); + (long long) f->pnparticles[i] ); } /* should I create a selection here? */ @@ -743,10 +741,10 @@ _write_data ( hid_t dataset_id; _H5Part_print_debug ( "Create a dataset[%s] mounted on the " - "timestep %lld", - name, (long long)f->timestep ); + "timestep %lld", + name, (long long)f->timestep ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API htri_t exists = H5Lexists ( f->timegroup, name, H5P_DEFAULT ); if ( exists > 0 ) return HANDLE_H5D_EXISTS_ERR ( name, f->timestep ); @@ -1056,7 +1054,7 @@ _H5Part_read_attrib ( hid_t mytype; hsize_t nelem; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API if (! H5Aexists ( id, attrib_name )) { _H5Part_print_warn ( "Attribute '%s' does not exist!", attrib_name ); } @@ -1067,7 +1065,7 @@ _H5Part_read_attrib ( if ( attrib_id <= 0 ) return HANDLE_H5A_OPEN_NAME_ERR( attrib_name ); type_id = H5Aget_type ( attrib_id ); - if ( mytype < 0 ) return HANDLE_H5A_GET_TYPE_ERR; + if ( type_id < 0 ) return HANDLE_H5A_GET_TYPE_ERR; space_id = H5Aget_space ( attrib_id ); if ( space_id < 0 ) return HANDLE_H5A_GET_SPACE_ERR; @@ -1087,6 +1085,43 @@ _H5Part_read_attrib ( herr = H5Aclose ( attrib_id ); if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR; + +/* if ( attrib_id <= 0 ) return HANDLE_H5A_OPEN_NAME_ERR( attrib_name ); */ + +/* mytype = H5Aget_type ( attrib_id ); */ +/* if ( mytype < 0 ) return HANDLE_H5A_GET_TYPE_ERR; */ + +/* space_id = H5Aget_space ( attrib_id ); */ +/* if ( space_id < 0 ) return HANDLE_H5A_GET_SPACE_ERR; */ + +/* nelem = H5Sget_simple_extent_npoints ( space_id ); */ +/* if ( nelem < 0 ) return HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR; */ + +/* type_id = _H5Part_normalize_h5_type ( mytype ); */ + +/* herr = H5Aread (attrib_id, type_id, attrib_value ); */ +/* if ( herr < 0 ) return HANDLE_H5A_READ_ERR; */ + +/* /\* _H5Part_close_h5_type( type_id ); *\/ */ + +/* if( type_id != H5T_NATIVE_CHAR && */ +/* type_id != H5T_NATIVE_INT64 && */ +/* type_id != H5T_NATIVE_FLOAT && */ +/* type_id != H5T_NATIVE_DOUBLE ) */ +/* { */ +/* herr = H5Tclose ( type_id ); */ +/* if ( herr < 0 ) return HANDLE_H5T_CLOSE_ERR; */ +/* } */ + +/* herr = H5Sclose ( space_id ); */ +/* if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR; */ + +/* herr = H5Tclose ( mytype ); */ +/* if ( herr < 0 ) return HANDLE_H5T_CLOSE_ERR; */ + +/* herr = H5Aclose ( attrib_id ); */ +/* if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR; */ + return H5PART_SUCCESS; } @@ -1118,22 +1153,16 @@ _H5Part_write_attrib ( return HANDLE_H5S_CREATE_SIMPLE_ERR ( attrib_nelem ); } -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - attrib_id = H5Acreate2 ( - id, - attrib_name, - type, - space_id, - H5P_DEFAULT, - H5P_DEFAULT ); -#else - attrib_id = H5Acreate ( - id, - attrib_name, - type, - space_id, - H5P_DEFAULT ); + attrib_id = H5Acreate( id, + attrib_name, + type, + space_id, + H5P_DEFAULT +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( attrib_id < 0 ) return HANDLE_H5A_CREATE_ERR ( attrib_name ); herr = H5Awrite ( attrib_id, type, attrib_value); @@ -1232,11 +1261,12 @@ H5PartWriteFileAttribString ( CHECK_FILEHANDLE ( f ); CHECK_WRITABLE_MODE( f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t group_id = H5Gopen2(f->file,"/",H5P_DEFAULT); -#else - hid_t group_id = H5Gopen(f->file,"/"); + hid_t group_id = H5Gopen ( f->file, "/" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); h5part_int64_t herr = _H5Part_write_attrib ( @@ -1441,11 +1471,12 @@ H5PartWriteFileAttrib ( CHECK_FILEHANDLE ( f ); CHECK_WRITABLE_MODE ( f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - group_id = H5Gopen2(f->file,"/",H5P_DEFAULT); -#else - group_id = H5Gopen(f->file,"/"); + group_id = H5Gopen(f->file,"/" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); herr = _H5Part_write_attrib ( @@ -1503,11 +1534,13 @@ H5PartGetNumFileAttribs ( CHECK_FILEHANDLE ( f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - hid_t group_id = H5Gopen2 ( f->file, "/", H5P_DEFAULT ); -#else - hid_t group_id = H5Gopen ( f->file, "/" ); + + hid_t group_id = H5Gopen ( f->file, "/" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( group_id < 0 ) HANDLE_H5G_OPEN_ERR ( "/" ); nattribs = H5Aget_num_attrs ( group_id ); @@ -1593,11 +1626,12 @@ H5PartGetFileAttribInfo ( CHECK_FILEHANDLE( f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - group_id = H5Gopen2(f->file,"/",H5P_DEFAULT); -#else - group_id = H5Gopen(f->file,"/"); + group_id = H5Gopen(f->file,"/" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); herr = _H5Part_get_attrib_info ( @@ -1635,7 +1669,8 @@ H5PartReadStepAttrib ( CHECK_FILEHANDLE( f ); - herr = _H5Part_read_attrib ( f->timegroup, attrib_name, attrib_value ); + herr = _H5Part_read_attrib ( f->timegroup, + attrib_name, attrib_value ); if ( herr < 0 ) return herr; return H5PART_SUCCESS; @@ -1662,11 +1697,12 @@ H5PartReadFileAttrib ( CHECK_FILEHANDLE( f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - group_id = H5Gopen2(f->file,"/",H5P_DEFAULT); -#else - group_id = H5Gopen(f->file,"/"); + group_id = H5Gopen(f->file,"/" +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( group_id < 0 ) return HANDLE_H5G_OPEN_ERR( "/" ); herr = _H5Part_read_attrib ( group_id, attrib_name, attrib_value ); @@ -1731,12 +1767,13 @@ _H5Part_set_step ( (long long)step, (long long)(size_t) f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - f->timegroup = H5Gopen2 ( f->file, name, H5P_DEFAULT ); -#else - f->timegroup = H5Gopen ( f->file, name ); + f->timegroup = H5Gopen ( f->file, name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif - if ( f->timegroup < 0 ) return HANDLE_H5G_OPEN_ERR( name ); + ); + if ( f->timegroup < 0 ) + return HANDLE_H5G_OPEN_ERR( name ); } else { _H5Part_print_debug ( @@ -1745,17 +1782,16 @@ _H5Part_set_step ( (long long)step, (long long)(size_t) f ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - f->timegroup = H5Gcreate2 ( - f->file, - name, - 0, - H5P_DEFAULT, - H5P_DEFAULT ); -#else - f->timegroup = H5Gcreate ( f->file, name, 0 ); + f->timegroup = H5Gcreate( f->file, + name, + 0 +#ifndef H5_USE_16_API + , H5P_DEFAULT, H5P_DEFAULT #endif - if ( f->timegroup < 0 ) return HANDLE_H5G_CREATE_ERR ( name ); + ); + + if ( f->timegroup < 0 ) + return HANDLE_H5G_CREATE_ERR ( name ); } return H5PART_SUCCESS; @@ -1802,13 +1838,124 @@ _H5Part_have_group ( const hid_t id, const char *name ) { -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API return (H5Lexists( id, name, H5P_DEFAULT ) ? 1 : 0); #else return (H5Gget_objinfo( id, name, 1, NULL ) >= 0 ? 1 : 0); #endif } + +/********************** query file structure *********************************/ + +/*! + \ingroup h5part_kernel + + Iterator for \c H5Giterate(). +*/ +#ifndef H5_USE_16_API +herr_t +_H5Part_iteration_operator2 ( + hid_t group_id, /*!< [in] parent object id */ + const char *member_name, /*!< [in] child object name */ + const H5L_info_t *linfo, /*!< link info */ + void *operator_data ) /*!< [in,out] data passed to the iterator */ +{ + struct _iter_op_data *data = (struct _iter_op_data*)operator_data; + herr_t herr = 0; + + switch (linfo->type) { + case H5L_TYPE_HARD: { + + H5O_info_t objinfo; + if( H5Oget_info_by_name( group_id, member_name, &objinfo, H5P_DEFAULT ) < 0 ) { + return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + } + + switch(objinfo.type) + { + case H5O_TYPE_GROUP: + case H5O_TYPE_DATASET: + return _H5Part_iteration_operator( group_id, + member_name, + operator_data ); + break; + + default: + return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + break; + } + + break; + } + + case H5L_TYPE_EXTERNAL: { + char *targbuf = (char*) malloc( linfo->u.val_size ); + + if(H5Lget_val(group_id, member_name, targbuf, linfo->u.val_size, + H5P_DEFAULT) < 0) { + + // DO TO - THROW AN ERROR + } else { + const char *filename; + const char *targname; + + if(H5Lunpack_elink_val(targbuf, linfo->u.val_size, 0, + &filename, &targname) < 0) { + // DO TO - THROW AN ERROR + } else { + +/* std::cout << "VsFilter::visitLinks: node '" << member_name << "' is an external link." << std::endl; */ + +/* std::cout << "VsFilter::visitLinks: node '" << targname << "' the is an external target group." << std::endl; */ + + free(targbuf); + + // Open the linked object. + H5O_info_t objinfo; + hid_t obj_id = H5Oopen(group_id, member_name, H5P_DEFAULT); + if ( obj_id < 0 ) { + return (herr_t)HANDLE_H5G_OPEN_ERR ( member_name ); + } + else if ( H5Oget_info ( obj_id, &objinfo ) < 0 ) { + return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + } + else { + + H5Oclose( obj_id ); + + switch(objinfo.type) + { + case H5O_TYPE_GROUP: + case H5O_TYPE_DATASET: + return _H5Part_iteration_operator( group_id, + member_name, + operator_data ); + break; + + default: + return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + break; + } + } + } + } + } + break; + + + default: + return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + break; + } + + return 0; +} +#endif // H5_USE_16_API + + +/********************** query file structure *********************************/ + /*! \ingroup h5part_kernel @@ -1816,46 +1963,55 @@ _H5Part_have_group ( */ herr_t _H5Part_iteration_operator ( - hid_t group_id, /*!< [in] group id */ - const char *member_name,/*!< [in] group name */ + hid_t group_id, /*!< [in] parent object id */ + const char *member_name,/*!< [in] child object name */ void *operator_data /*!< [in,out] data passed to the iterator */ - ) { + ) +{ + struct _iter_op_data *data = (struct _iter_op_data*)operator_data; + herr_t herr; - struct _iter_op_data *data = (struct _iter_op_data*)operator_data; - herr_t herr; +/* printf( "%d GROUP ITERATOR %s %d\n", __LINE__, member_name, data->type ); */ - if ( data->type != H5G_UNKNOWN ) { - hid_t obj_id = H5Oopen( group_id, member_name, H5P_DEFAULT ); - if ( obj_id < 0 ) return (herr_t)HANDLE_H5O_OPEN_ERR ( member_name ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - H5O_info_t objinfo; - herr = H5Oget_info ( group_id, &objinfo ); - if ( herr < 0 ) return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + if ( data->type != H5G_UNKNOWN ) { + +#ifndef H5_USE_16_API + H5O_info_t objinfo; + + hid_t obj_id = H5Oopen(group_id, member_name, H5P_DEFAULT); + if ( obj_id < 0 ) + return (herr_t)HANDLE_H5G_OPEN_ERR ( member_name ); + + herr = H5Oget_info ( obj_id, &objinfo ); + if ( herr < 0 ) + return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + + H5Oclose( obj_id ); #else - H5G_stat_t objinfo; - herr = H5Gget_objinfo ( group_id, member_name, 1, &objinfo ); - if ( herr < 0 ) return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); + H5G_stat_t objinfo; + herr = H5Gget_objinfo( group_id, member_name, 1, &objinfo ); + if ( herr < 0 ) return (herr_t)HANDLE_H5G_GET_OBJINFO_ERR ( member_name ); #endif - H5Oclose( obj_id ); - if ( objinfo.type != data->type ) - return 0;/* don't count, continue iteration */ - } - if ( data->name && (data->stop_idx == data->count) ) { - memset ( data->name, 0, data->len ); - strncpy ( data->name, member_name, data->len-1 ); + if ( objinfo.type != data->type ) + { + return 0;/* don't count, continue iteration */ + } + } + + if ( data->name && (data->stop_idx == data->count) ) { + memset ( data->name, 0, data->len ); + strncpy ( data->name, member_name, data->len-1 ); - return 1; /* stop iteration */ - } - /* - count only if pattern is NULL or member name matches - */ - if ( !data->pattern || - (strncmp (member_name, data->pattern, strlen(data->pattern)) == 0) - ) { - data->count++; - } - return 0; /* continue iteration */ + return 1; /* stop iteration */ + } + /* count only if pattern is NULL or member name matches */ + if ( !data->pattern || + (strncmp (member_name, data->pattern, strlen(data->pattern)) == 0) + ) { + data->count++; + } + return 0; /* continue iteration */ } /*! @@ -1898,10 +2054,25 @@ _H5Part_get_num_objects_matching_pattern ( data.type = type; data.pattern = pattern; +/* herr = H5Giterate ( group_id, group_name, &idx, */ +/* _H5Part_iteration_operator, &data ); */ + +#ifndef H5_USE_16_API + hid_t child_id = H5Gopen( group_id, group_name, H5P_DEFAULT ); + if ( child_id < 0 ) return child_id; + herr = H5Literate( child_id, H5_INDEX_NAME, H5_ITER_INC, 0, + _H5Part_iteration_operator2, &data ); +#else herr = H5Giterate ( group_id, group_name, &idx, - _H5Part_iteration_operator, &data ); + _H5Part_iteration_operator, &data ); +#endif + if ( herr < 0 ) return herr; - + +#ifndef H5_USE_16_API + H5Gclose( child_id ); +#endif + return data.count; } @@ -1930,14 +2101,28 @@ _H5Part_get_object_name ( data.name = obj_name; data.len = (size_t)len_obj_name; +/* herr = H5Giterate ( group_id, group_name, &iterator_idx, */ +/* _H5Part_iteration_operator, &data ); */ + +#ifndef H5_USE_16_API + hid_t child_id = H5Gopen( group_id, group_name, H5P_DEFAULT ); + if ( child_id < 0 ) return child_id; + herr = H5Literate( child_id, H5_INDEX_NAME, H5_ITER_INC, 0, + _H5Part_iteration_operator2, &data ); +#else herr = H5Giterate ( group_id, group_name, &iterator_idx, - _H5Part_iteration_operator, - &data ); + _H5Part_iteration_operator, &data ); +#endif + if ( herr < 0 ) return (h5part_int64_t)herr; if ( herr == 0 ) HANDLE_H5PART_NOENTRY_ERR( group_name, type, idx ); +#ifndef H5_USE_16_API + H5Gclose( child_id ); +#endif + return H5PART_SUCCESS; } @@ -2141,11 +2326,12 @@ H5PartGetDatasetInfo ( *nelem = _H5Part_get_num_particles ( f ); if ( *nelem < 0 ) return *nelem; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - dataset_id = H5Dopen2 ( f->timegroup, dataset_name, H5P_DEFAULT ); -#else - dataset_id = H5Dopen ( f->timegroup, dataset_name ); + dataset_id = H5Dopen( f->timegroup, dataset_name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( dataset_id < 0 ) HANDLE_H5D_OPEN_ERR ( dataset_name ); mytype = H5Dget_type ( dataset_id ); @@ -2264,11 +2450,12 @@ _H5Part_get_num_particles ( dataset_name, sizeof (dataset_name) ); if ( herr < 0 ) return herr; -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - dataset_id = H5Dopen2 ( f->timegroup, dataset_name, H5P_DEFAULT ); -#else - dataset_id = H5Dopen ( f->timegroup, dataset_name ); + dataset_id = H5Dopen ( f->timegroup, dataset_name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( dataset_name ); @@ -2633,11 +2820,12 @@ _read_data ( h5part_int64_t h5err = _H5Part_set_step ( f, f->timestep ); if ( h5err < 0 ) return h5err; } -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - dataset_id = H5Dopen2 ( f->timegroup, name, H5P_DEFAULT ); -#else - dataset_id = H5Dopen ( f->timegroup, name ); + dataset_id = H5Dopen ( f->timegroup, name +#ifndef H5_USE_16_API + , H5P_DEFAULT #endif + ); + if ( dataset_id < 0 ) return HANDLE_H5D_OPEN_ERR ( name ); space_id = _get_diskshape_for_reading ( f, dataset_id ); @@ -3081,8 +3269,8 @@ _init ( void ) { herr_t r5; if ( ! __init ) { _H5Part_set_funcname ( "NONE" ); -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - r5 = H5Eset_auto2 ( H5E_DEFAULT, _h5_error_handler, NULL ); +#ifndef H5_USE_16_API + r5 = H5Eset_auto ( H5E_DEFAULT, _h5_error_handler, NULL ); #else r5 = H5Eset_auto ( _h5_error_handler, NULL ); #endif @@ -3094,15 +3282,15 @@ _init ( void ) { /*! @} */ static herr_t -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 +#ifndef H5_USE_16_API _h5_error_handler ( hid_t estack, void* unused ) { #else _h5_error_handler ( void* unused ) { #endif if ( _debug >= 1 ) { -#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 8 - H5Eprint2 (H5E_DEFAULT,stderr); +#ifndef H5_USE_16_API + H5Eprint (H5E_DEFAULT,stderr); #else H5Eprint (stderr); #endif diff --git a/src/H5PartPrivate.h b/src/H5PartPrivate.h index 97d71d2..15bdf1d 100644 --- a/src/H5PartPrivate.h +++ b/src/H5PartPrivate.h @@ -1,6 +1,10 @@ #ifndef __H5PARTPRIVATE_H #define __H5PARTPRIVATE_H +#if H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 6 +#define H5_USE_16_API +#endif + #define H5PART_GROUPNAME_STEP "Step" #define H5PART_BTREE_IK 10000 @@ -41,6 +45,14 @@ _H5Part_iteration_operator ( void *operator_data ); +#ifndef H5_USE_16_API +herr_t +_H5Part_iteration_operator2 ( + hid_t group_id, /*!< [in] parent object id */ + const char *member_name, /*!< [in] child object name */ + const H5L_info_t *linfo, /*!< link info */ + void *operator_data ); /*!< [in,out] data passed to the iterator */ +#endif void _H5Part_set_funcname (