diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2012-09-05 18:13:15 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2012-09-05 18:13:15 (GMT) |
commit | 9ce6dadd4848ad1371d32f99d320efa87de32050 (patch) | |
tree | 1d301a6b3b50dda6b3f9490291c96c9cc0ec1f77 /src/H5Pdxpl.c | |
parent | 60daa9be2b660c4583f581c85ea2177b060c4fcb (diff) | |
parent | 1c9e159ffe6cf85a5c076f747758dc47eb7a111a (diff) | |
download | hdf5-9ce6dadd4848ad1371d32f99d320efa87de32050.zip hdf5-9ce6dadd4848ad1371d32f99d320efa87de32050.tar.gz hdf5-9ce6dadd4848ad1371d32f99d320efa87de32050.tar.bz2 |
[svn-r22739] ported revisions 22615 to 22737 from the trunk
Diffstat (limited to 'src/H5Pdxpl.c')
-rw-r--r-- | src/H5Pdxpl.c | 622 |
1 files changed, 266 insertions, 356 deletions
diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c index a4fc749..2596d35 100644 --- a/src/H5Pdxpl.c +++ b/src/H5Pdxpl.c @@ -47,50 +47,46 @@ /* ======== Data transfer properties ======== */ /* Definitions for maximum temp buffer size property */ -#define H5D_XFER_MAX_TEMP_BUF_SIZE sizeof(size_t) -#define H5D_XFER_MAX_TEMP_BUF_DEF H5D_TEMP_BUF_SIZE +#define H5D_XFER_MAX_TEMP_BUF_SIZE sizeof(size_t) +#define H5D_XFER_MAX_TEMP_BUF_DEF H5D_TEMP_BUF_SIZE /* Definitions for type conversion buffer property */ -#define H5D_XFER_TCONV_BUF_SIZE sizeof(void *) -#define H5D_XFER_TCONV_BUF_DEF NULL +#define H5D_XFER_TCONV_BUF_SIZE sizeof(void *) +#define H5D_XFER_TCONV_BUF_DEF NULL /* Definitions for background buffer property */ -#define H5D_XFER_BKGR_BUF_SIZE sizeof(void *) -#define H5D_XFER_BKGR_BUF_DEF NULL +#define H5D_XFER_BKGR_BUF_SIZE sizeof(void *) +#define H5D_XFER_BKGR_BUF_DEF NULL /* Definitions for background buffer type property */ -#define H5D_XFER_BKGR_BUF_TYPE_SIZE sizeof(H5T_bkg_t) +#define H5D_XFER_BKGR_BUF_TYPE_SIZE sizeof(H5T_bkg_t) #define H5D_XFER_BKGR_BUF_TYPE_DEF H5T_BKG_NO /* Definitions for B-tree node splitting ratio property */ /* (These default B-tree node splitting ratios are also used for splitting * group's B-trees as well as chunked dataset's B-trees - QAK) */ -#define H5D_XFER_BTREE_SPLIT_RATIO_SIZE sizeof(double[3]) -#define H5D_XFER_BTREE_SPLIT_RATIO_DEF {0.1, 0.5, 0.9} +#define H5D_XFER_BTREE_SPLIT_RATIO_SIZE sizeof(double[3]) +#define H5D_XFER_BTREE_SPLIT_RATIO_DEF {0.1, 0.5, 0.9} /* Definitions for vlen allocation function property */ -#define H5D_XFER_VLEN_ALLOC_SIZE sizeof(H5MM_allocate_t) -#define H5D_XFER_VLEN_ALLOC_DEF H5D_VLEN_ALLOC +#define H5D_XFER_VLEN_ALLOC_SIZE sizeof(H5MM_allocate_t) +#define H5D_XFER_VLEN_ALLOC_DEF H5D_VLEN_ALLOC /* Definitions for vlen allocation info property */ -#define H5D_XFER_VLEN_ALLOC_INFO_SIZE sizeof(void *) -#define H5D_XFER_VLEN_ALLOC_INFO_DEF H5D_VLEN_ALLOC_INFO +#define H5D_XFER_VLEN_ALLOC_INFO_SIZE sizeof(void *) +#define H5D_XFER_VLEN_ALLOC_INFO_DEF H5D_VLEN_ALLOC_INFO /* Definitions for vlen free function property */ -#define H5D_XFER_VLEN_FREE_SIZE sizeof(H5MM_free_t) -#define H5D_XFER_VLEN_FREE_DEF H5D_VLEN_FREE +#define H5D_XFER_VLEN_FREE_SIZE sizeof(H5MM_free_t) +#define H5D_XFER_VLEN_FREE_DEF H5D_VLEN_FREE /* Definitions for vlen free info property */ -#define H5D_XFER_VLEN_FREE_INFO_SIZE sizeof(void *) -#define H5D_XFER_VLEN_FREE_INFO_DEF H5D_VLEN_FREE_INFO -/* Definitions for file driver ID property */ -#define H5D_XFER_VFL_ID_SIZE sizeof(hid_t) -#define H5D_XFER_VFL_ID_DEF H5FD_VFD_DEFAULT -/* Definitions for file driver info property */ -#define H5D_XFER_VFL_INFO_SIZE sizeof(void *) -#define H5D_XFER_VFL_INFO_DEF NULL +#define H5D_XFER_VLEN_FREE_INFO_SIZE sizeof(void *) +#define H5D_XFER_VLEN_FREE_INFO_DEF H5D_VLEN_FREE_INFO /* Definitions for hyperslab vector size property */ /* (Be cautious about increasing the default size, there are arrays allocated * on the stack which depend on it - QAK) */ -#define H5D_XFER_HYPER_VECTOR_SIZE_SIZE sizeof(size_t) -#define H5D_XFER_HYPER_VECTOR_SIZE_DEF H5D_IO_VECTOR_SIZE +#define H5D_XFER_HYPER_VECTOR_SIZE_SIZE sizeof(size_t) +#define H5D_XFER_HYPER_VECTOR_SIZE_DEF H5D_IO_VECTOR_SIZE + +#ifdef H5_HAVE_PARALLEL /* Definitions for I/O transfer mode property */ -#define H5D_XFER_IO_XFER_MODE_SIZE sizeof(H5FD_mpio_xfer_t) -#define H5D_XFER_IO_XFER_MODE_DEF H5FD_MPIO_INDEPENDENT +#define H5D_XFER_IO_XFER_MODE_SIZE sizeof(H5FD_mpio_xfer_t) +#define H5D_XFER_IO_XFER_MODE_DEF H5FD_MPIO_INDEPENDENT /* Definitions for optimization of MPI-IO transfer mode property */ #define H5D_XFER_MPIO_COLLECTIVE_OPT_SIZE sizeof(H5FD_mpio_collective_opt_t) #define H5D_XFER_MPIO_COLLECTIVE_OPT_DEF H5FD_MPIO_COLLECTIVE_IO @@ -106,6 +102,17 @@ /* Definitions for chunk io mode property. */ #define H5D_MPIO_ACTUAL_IO_MODE_SIZE sizeof(H5D_mpio_actual_io_mode_t) #define H5D_MPIO_ACTUAL_IO_MODE_DEF H5D_MPIO_NO_COLLECTIVE +/* Definitions for cause of broken collective io property */ +#define H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE sizeof(H5D_mpio_no_collective_cause_t) +#define H5D_MPIO_NO_COLLECTIVE_CAUSE_DEF H5D_MPIO_COLLECTIVE +/* Definitions for memory MPI type property */ +#define H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE sizeof(MPI_Datatype) +#define H5FD_MPI_XFER_MEM_MPI_TYPE_DEF MPI_DATATYPE_NULL +/* Definitions for file MPI type property */ +#define H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE sizeof(MPI_Datatype) +#define H5FD_MPI_XFER_FILE_MPI_TYPE_DEF MPI_DATATYPE_NULL +#endif /* H5_HAVE_PARALLEL */ + /* Definitions for EDC property */ #define H5D_XFER_EDC_SIZE sizeof(H5Z_EDC_t) #define H5D_XFER_EDC_DEF H5Z_ENABLE_EDC @@ -118,15 +125,10 @@ /* Definitions for data transform property */ #define H5D_XFER_XFORM_SIZE sizeof(void *) #define H5D_XFER_XFORM_DEF NULL -#define H5D_XFER_XFORM_DEL H5P_dxfr_xform_del -#define H5D_XFER_XFORM_COPY H5P_dxfr_xform_copy -#define H5D_XFER_XFORM_CLOSE H5P_dxfr_xform_close -/* Definitions for memory MPI type property */ -#define H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE sizeof(MPI_Datatype) -#define H5FD_MPI_XFER_MEM_MPI_TYPE_DEF MPI_DATATYPE_NULL -/* Definitions for file MPI type property */ -#define H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE sizeof(MPI_Datatype) -#define H5FD_MPI_XFER_FILE_MPI_TYPE_DEF MPI_DATATYPE_NULL +#define H5D_XFER_XFORM_DEL H5P__dxfr_xform_del +#define H5D_XFER_XFORM_COPY H5P__dxfr_xform_copy +#define H5D_XFER_XFORM_CMP H5P__dxfr_xform_cmp +#define H5D_XFER_XFORM_CLOSE H5P__dxfr_xform_close /******************/ /* Local Typedefs */ @@ -143,15 +145,13 @@ /********************/ /* Property class callbacks */ -static herr_t H5P_dxfr_reg_prop(H5P_genclass_t *pclass); -static herr_t H5P_dxfr_create(hid_t dxpl_id, void *create_data); -static herr_t H5P_dxfr_copy(hid_t dst_dxpl_id, hid_t src_dxpl_id, void *copy_data); -static herr_t H5P_dxfr_close(hid_t dxpl_id, void *close_data); +static herr_t H5P__dxfr_reg_prop(H5P_genclass_t *pclass); /* Property list callbacks */ -static herr_t H5P_dxfr_xform_del(hid_t prop_id, const char* name, size_t size, void* value); -static herr_t H5P_dxfr_xform_copy(const char* name, size_t size, void* value); -static herr_t H5P_dxfr_xform_close(const char* name, size_t size, void* value); +static herr_t H5P__dxfr_xform_del(hid_t prop_id, const char* name, size_t size, void* value); +static herr_t H5P__dxfr_xform_copy(const char* name, size_t size, void* value); +static int H5P__dxfr_xform_cmp(const void *value1, const void *value2, size_t size); +static herr_t H5P__dxfr_xform_close(const char* name, size_t size, void* value); /*********************/ @@ -161,15 +161,16 @@ static herr_t H5P_dxfr_xform_close(const char* name, size_t size, void* value); /* Data transfer property list class library initialization object */ const H5P_libclass_t H5P_CLS_DXFR[1] = {{ "data transfer", /* Class name for debugging */ + H5P_TYPE_DATASET_XFER, /* Class type */ &H5P_CLS_ROOT_g, /* Parent class ID */ &H5P_CLS_DATASET_XFER_g, /* Pointer to class ID */ &H5P_LST_DATASET_XFER_g, /* Pointer to default property list ID */ - H5P_dxfr_reg_prop, /* Default property registration routine */ - H5P_dxfr_create, /* Class creation callback */ + H5P__dxfr_reg_prop, /* Default property registration routine */ + NULL, /* Class creation callback */ NULL, /* Class creation callback info */ - H5P_dxfr_copy, /* Class copy callback */ + NULL, /* Class copy callback */ NULL, /* Class copy callback info */ - H5P_dxfr_close, /* Class close callback */ + NULL, /* Class close callback */ NULL /* Class close callback info */ }}; @@ -181,7 +182,7 @@ const H5P_libclass_t H5P_CLS_DXFR[1] = {{ /*------------------------------------------------------------------------- - * Function: H5P_dxfr_reg_prop + * Function: H5P__dxfr_reg_prop * * Purpose: Register the data transfer property list class's properties * @@ -192,7 +193,7 @@ const H5P_libclass_t H5P_CLS_DXFR[1] = {{ *------------------------------------------------------------------------- */ static herr_t -H5P_dxfr_reg_prop(H5P_genclass_t *pclass) +H5P__dxfr_reg_prop(H5P_genclass_t *pclass) { size_t def_max_temp_buf = H5D_XFER_MAX_TEMP_BUF_DEF; /* Default value for maximum temp buffer size */ void *def_tconv_buf = H5D_XFER_TCONV_BUF_DEF; /* Default value for type conversion buffer */ @@ -203,8 +204,6 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) void *def_vlen_alloc_info = H5D_XFER_VLEN_ALLOC_INFO_DEF; /* Default value for vlen allocation information */ H5MM_free_t def_vlen_free = H5D_XFER_VLEN_FREE_DEF; /* Default value for vlen free function */ void *def_vlen_free_info = H5D_XFER_VLEN_FREE_INFO_DEF; /* Default value for vlen free information */ - hid_t def_vfl_id = H5D_XFER_VFL_ID_DEF; /* Default value for file driver ID */ - void *def_vfl_info = H5D_XFER_VFL_INFO_DEF; /* Default value for file driver info */ size_t def_hyp_vec_size = H5D_XFER_HYPER_VECTOR_SIZE_DEF; /* Default value for vector size */ haddr_t metadata_tag = H5AC_METADATA_TAG_DEF; /* Default value for metadata tag */ #ifdef H5_HAVE_PARALLEL @@ -215,6 +214,7 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) unsigned def_mpio_chunk_opt_ratio = H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEF; H5D_mpio_actual_chunk_opt_mode_t def_mpio_actual_chunk_opt_mode = H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_DEF; H5D_mpio_actual_io_mode_t def_mpio_actual_io_mode = H5D_MPIO_ACTUAL_IO_MODE_DEF; + H5D_mpio_no_collective_cause_t def_mpio_no_collective_cause = H5D_MPIO_NO_COLLECTIVE_CAUSE_DEF; MPI_Datatype btype = H5FD_MPI_XFER_MEM_MPI_TYPE_DEF; /* Default value for MPI buffer type */ MPI_Datatype ftype = H5FD_MPI_XFER_FILE_MPI_TYPE_DEF; /* Default value for MPI file type */ #endif /* H5_HAVE_PARALLEL */ @@ -224,7 +224,7 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) void *def_xfer_xform = H5D_XFER_XFORM_DEF; /* Default value for data transform */ herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_STATIC /* Register the max. temp buffer size property */ if(H5P_register_real(pclass, H5D_XFER_MAX_TEMP_BUF_NAME, H5D_XFER_MAX_TEMP_BUF_SIZE, &def_max_temp_buf, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) @@ -266,14 +266,6 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) if(H5P_register_real(pclass, H5D_XFER_VLEN_FREE_INFO_NAME, H5D_XFER_VLEN_FREE_INFO_SIZE, &def_vlen_free_info, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") - /* Register the file driver ID property */ - if(H5P_register_real(pclass, H5D_XFER_VFL_ID_NAME, H5D_XFER_VFL_ID_SIZE, &def_vfl_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") - - /* Register the file driver info property */ - if(H5P_register_real(pclass, H5D_XFER_VFL_INFO_NAME, H5D_XFER_VFL_INFO_SIZE, &def_vfl_info, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") - /* Register the vector size property */ if(H5P_register_real(pclass, H5D_XFER_HYPER_VECTOR_SIZE_NAME, H5D_XFER_HYPER_VECTOR_SIZE_SIZE, &def_hyp_vec_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") @@ -295,10 +287,18 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_SIZE, &def_mpio_actual_chunk_opt_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") - /* Register the actual io mode property. */ + /* Register the actual I/O mode property. */ if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_IO_MODE_NAME, H5D_MPIO_ACTUAL_IO_MODE_SIZE, &def_mpio_actual_io_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") + /* Register the local cause of broken collective I/O */ + if(H5P_register_real(pclass, H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE, &def_mpio_actual_io_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") + + /* Register the global cause of broken collective I/O */ + if(H5P_register_real(pclass, H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, H5D_MPIO_NO_COLLECTIVE_CAUSE_SIZE, &def_mpio_actual_io_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") + /* Register the MPI memory type property */ if(H5P_register_real(pclass, H5FD_MPI_XFER_MEM_MPI_TYPE_NAME, H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE, &btype, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) @@ -308,7 +308,6 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) if(H5P_register_real(pclass, H5FD_MPI_XFER_FILE_MPI_TYPE_NAME, H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE, &ftype, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") - #endif /* H5_HAVE_PARALLEL */ /* Register the EDC property */ @@ -324,168 +323,52 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") /* Register the data transform property */ - if(H5P_register_real(pclass, H5D_XFER_XFORM_NAME, H5D_XFER_XFORM_SIZE, &def_xfer_xform, NULL, NULL, NULL, H5D_XFER_XFORM_DEL, H5D_XFER_XFORM_COPY, NULL, H5D_XFER_XFORM_CLOSE) < 0) + if(H5P_register_real(pclass, H5D_XFER_XFORM_NAME, H5D_XFER_XFORM_SIZE, &def_xfer_xform, NULL, NULL, NULL, H5D_XFER_XFORM_DEL, H5D_XFER_XFORM_COPY, H5D_XFER_XFORM_CMP, H5D_XFER_XFORM_CLOSE) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_reg_prop() */ +} /* end H5P__dxfr_reg_prop() */ -/*------------------------------------------------------------------------- - * Function: H5P_dxfr_create - * - * Purpose: Callback routine which is called whenever any dataset transfer - * property list is created. This routine performs any generic - * initialization needed on the properties the library put into - * the list. - * Right now, it's just allocating the driver-specific dataset - * transfer information. - * - * Return: Success: Non-negative - * - * Failure: Negative - * - * Programmer: Quincey Koziol - * Thursday, August 2, 2001 - * - *------------------------------------------------------------------------- - */ -/* ARGSUSED */ -static herr_t -H5P_dxfr_create(hid_t dxpl_id, void UNUSED *create_data) -{ - hid_t driver_id; /* VFL driver ID */ - void *driver_info; /* VFL driver info */ - H5P_genplist_t *plist; /* Property list */ - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI_NOINIT - - /* Check arguments */ - if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list") - - /* Get the driver information */ - if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver ID") - if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &driver_info) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver info") - - /* Check if we have a valid driver ID */ - if(driver_id > 0) { - /* Set the driver for the property list */ - if(H5FD_dxpl_open(plist, driver_id, driver_info) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver") - } /* end if */ - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_create() */ - - -/*------------------------------------------------------------------------- - * Function: H5P_dxfr_copy - * - * Purpose: Callback routine which is called whenever any dataset - * transfer property list is copied. This routine copies - * the properties from the old list to the new list. - * - * Return: Success: Non-negative - * - * Failure: Negative - * - * Programmer: Raymond Lu - * Tuesday, October 2, 2001 - * - *------------------------------------------------------------------------- - */ -/* ARGSUSED */ -static herr_t -H5P_dxfr_copy(hid_t dst_dxpl_id, hid_t src_dxpl_id, void UNUSED *copy_data) -{ - hid_t driver_id; - void* driver_info; - H5P_genplist_t *dst_plist; /* Destination property list */ - H5P_genplist_t *src_plist; /* Source property list */ - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI_NOINIT - - if(NULL == (dst_plist = (H5P_genplist_t *)H5I_object(dst_dxpl_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list") - if(NULL == (src_plist = (H5P_genplist_t *)H5I_object(src_dxpl_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list") - - /* Get values from old property list */ - if(H5P_get(src_plist, H5D_XFER_VFL_ID_NAME, &driver_id) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver ID") - if(H5P_get(src_plist, H5D_XFER_VFL_INFO_NAME, &driver_info) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get drver info") - - if(driver_id > 0) { - /* Set the driver for the property list */ - if(H5FD_dxpl_open(dst_plist, driver_id, driver_info) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver") - } /* end if */ - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_copy() */ /*------------------------------------------------------------------------- - * Function: H5P_dxfr_close + * Function: H5P_dxfr_xform_del * - * Purpose: Callback routine which is called whenever any dataset transfer - * property list is closed. This routine performs any generic - * cleanup needed on the properties the library put into the list. - * Right now, it's just freeing the driver-specific dataset - * transfer information. + * Purpose: Frees memory allocated by H5P_dxfr_xform_set * - * Return: Success: Non-negative + * Return: Success: SUCCEED, Failure: FAIL * - * Failure: Negative + * Programmer: Leon Arber larber@uiuc.edu * - * Programmer: Quincey Koziol - * Wednesday, July 11, 2001 + * Date: April 9, 2004 * *------------------------------------------------------------------------- */ /* ARGSUSED */ static herr_t -H5P_dxfr_close(hid_t dxpl_id, void UNUSED *close_data) +H5P__dxfr_xform_del(hid_t UNUSED prop_id, const char UNUSED *name, size_t UNUSED size, void *value) { - hid_t driver_id; /* VFL driver ID */ - void *driver_info; /* VFL driver info */ - H5P_genplist_t *plist; /* Property list */ - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_STATIC - /* Check arguments */ - if(NULL == (plist = (H5P_genplist_t *)H5I_object(dxpl_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list") + HDassert(value); - if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID") - if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &driver_info) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info") - if(driver_id > 0) { - /* Close the driver for the property list */ - if(H5FD_dxpl_close(driver_id, driver_info) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't reset driver") - } /* end if */ + if(H5Z_xform_destroy(*(H5Z_data_xform_t **)value) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTCLOSEOBJ, FAIL, "error closing the parse tree") done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_close() */ +} /* end H5P__dxfr_xform_del() */ /*------------------------------------------------------------------------- - * Function: H5P_dxfr_xform_del + * Function: H5P__dxfr_xform_copy * - * Purpose: Frees memory allocated by H5P_dxfr_xform_set + * Purpose: Creates a copy of the user's data transform string and its + * associated parse tree. * * Return: Success: SUCCEED, Failure: FAIL * @@ -497,56 +380,78 @@ done: */ /* ARGSUSED */ static herr_t -H5P_dxfr_xform_del(hid_t UNUSED prop_id, const char UNUSED *name, size_t UNUSED size, void *value) +H5P__dxfr_xform_copy(const char UNUSED *name, size_t UNUSED size, void *value) { - herr_t ret_value = SUCCEED; + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_STATIC HDassert(value); - if(H5Z_xform_destroy(*(H5Z_data_xform_t **)value) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTCLOSEOBJ, FAIL, "error closing the parse tree") + if(H5Z_xform_copy((H5Z_data_xform_t **)value) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTCLOSEOBJ, FAIL, "error copying the data transform info") done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_xform_del() */ +} /* end H5P__dxfr_xform_copy() */ /*------------------------------------------------------------------------- - * Function: H5P_dxfr_xform_copy + * Function: H5P__dxfr_xform_cmp * - * Purpose: Creates a copy of the user's data transform string and its - * associated parse tree. - * - * Return: Success: SUCCEED, Failure: FAIL + * Purpose: Compare two data transforms. * - * Programmer: Leon Arber larber@uiuc.edu + * Return: positive if VALUE1 is greater than VALUE2, negative if VALUE2 is + * greater than VALUE1 and zero if VALUE1 and VALUE2 are equal. * - * Date: April 9, 2004 + * Programmer: Quincey Koziol + * Wednesday, August 15, 2012 * *------------------------------------------------------------------------- */ -/* ARGSUSED */ -static herr_t -H5P_dxfr_xform_copy(const char UNUSED *name, size_t UNUSED size, void *value) +static int +H5P__dxfr_xform_cmp(const void *_xform1, const void *_xform2, size_t UNUSED size) { - herr_t ret_value = SUCCEED; + const H5Z_data_xform_t * const *xform1 = (const H5Z_data_xform_t * const *)_xform1; /* Create local aliases for values */ + const H5Z_data_xform_t * const *xform2 = (const H5Z_data_xform_t * const *)_xform2; /* Create local aliases for values */ + const char *pexp1, *pexp2; /* Pointers to transform expressions */ + herr_t ret_value = 0; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_STATIC_NOERR - HDassert(value); + /* Sanity check */ + HDassert(xform1); + HDassert(xform2); + HDassert(size == sizeof(H5Z_data_xform_t *)); - if(H5Z_xform_copy((H5Z_data_xform_t **)value) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTCLOSEOBJ, FAIL, "error copying the data transform info") + /* Check for a property being set */ + if(*xform1 == NULL && *xform2 != NULL) HGOTO_DONE(-1); + if(*xform1 != NULL && *xform2 == NULL) HGOTO_DONE(1); + + if(*xform1) { + HDassert(*xform2); + + /* Get the transform expressions */ + pexp1 = H5Z_xform_extract_xform_str(*xform1); + pexp2 = H5Z_xform_extract_xform_str(*xform2); + + /* Check for property expressions */ + if(pexp1 == NULL && pexp2 != NULL) HGOTO_DONE(-1); + if(pexp1 != NULL && pexp2 == NULL) HGOTO_DONE(1); + + if(pexp1) { + HDassert(pexp2); + ret_value = HDstrcmp(pexp1, pexp2); + } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_xform_copy() */ +} /* end H5P__dxfr_xform_copy() */ /*------------------------------------------------------------------------- - * Function: H5P_dxfr_xform_close + * Function: H5P__dxfr_xform_close * * Purpose: Frees memory allocated by H5P_dxfr_xform_set * @@ -560,11 +465,11 @@ done: */ /* ARGSUSED */ static herr_t -H5P_dxfr_xform_close(const char UNUSED *name, size_t UNUSED size, void *value) +H5P__dxfr_xform_close(const char UNUSED *name, size_t UNUSED size, void *value) { - herr_t ret_value = SUCCEED; + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_STATIC HDassert(value); @@ -573,18 +478,15 @@ H5P_dxfr_xform_close(const char UNUSED *name, size_t UNUSED size, void *value) done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_dxfr_xform_close() */ +} /* end H5P__dxfr_xform_close() */ /*------------------------------------------------------------------------- * Function: H5Pset_data_transform * - * Purpose: - * Sets data transform expression. - * - * - * Return: Returns a non-negative value if successful; otherwise returns a negative value. + * Purpose: Sets data transform expression. * + * Return: Non-negative on success/Negative on failure * * Programmer: Leon Arber * Monday, March 07, 2004 @@ -606,12 +508,16 @@ H5Pset_data_transform(hid_t plist_id, const char *expression) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "expression cannot be NULL") /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* See if a data transform is already set, and free it if it is */ - if(H5P_get(plist, H5D_XFER_XFORM_NAME, &data_xform_prop) >= 0) - H5Z_xform_destroy(data_xform_prop); + if(H5P_get(plist, H5D_XFER_XFORM_NAME, &data_xform_prop) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "error getting data transform expression") + + /* Destroy previous data transform property */ + if(H5Z_xform_destroy(data_xform_prop) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CLOSEERROR, FAIL, "unable to release data transform expression") /* Create data transform info from expression */ if(NULL == (data_xform_prop = H5Z_xform_create(expression))) @@ -623,9 +529,8 @@ H5Pset_data_transform(hid_t plist_id, const char *expression) done: if(ret_value < 0) { - if(data_xform_prop) - if(H5Z_xform_destroy(data_xform_prop) < 0) - HDONE_ERROR(H5E_PLINE, H5E_CLOSEERROR, FAIL, "unable to release data transform expression") + if(data_xform_prop && H5Z_xform_destroy(data_xform_prop) < 0) + HDONE_ERROR(H5E_PLINE, H5E_CLOSEERROR, FAIL, "unable to release data transform expression") } /* end if */ FUNC_LEAVE_API(ret_value) @@ -635,10 +540,9 @@ done: /*------------------------------------------------------------------------- * Function: H5Pget_data_transform * - * Purpose: - * Gets data transform expression. + * Purpose: Gets data transform expression. * - * Return: Returns a non-negative value if successful; otherwise returns a negative value. + * Return: Non-negative on success/Negative on failure * * Comments: * If `expression' is non-NULL then write up to `size' bytes into that @@ -661,7 +565,7 @@ H5Pget_data_transform(hid_t plist_id, char *expression /*out*/, size_t size) H5P_genplist_t *plist; /* Property list pointer */ H5Z_data_xform_t *data_xform_prop = NULL; /* New data xform property */ size_t len; - char* pexp; + const char* pexp; ssize_t ret_value; /* return value */ FUNC_ENTER_API(FAIL) @@ -675,13 +579,11 @@ H5Pget_data_transform(hid_t plist_id, char *expression /*out*/, size_t size) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "error getting data transform expression") if(NULL == data_xform_prop) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "data transform has not been set") + HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "data transform has not been set") /* Get the data transform string */ - pexp = H5Z_xform_extract_xform_str(data_xform_prop); - - if(!pexp) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "failed to retrieve transform expression") + if(NULL == (pexp = H5Z_xform_extract_xform_str(data_xform_prop))) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "failed to retrieve transform expression") len = HDstrlen(pexp); if(expression) { @@ -694,9 +596,8 @@ H5Pget_data_transform(hid_t plist_id, char *expression /*out*/, size_t size) done: if(ret_value < 0) { - if(data_xform_prop) - if(H5Z_xform_destroy(data_xform_prop) < 0) - HDONE_ERROR(H5E_PLINE, H5E_CLOSEERROR, FAIL, "unable to release data transform expression") + if(data_xform_prop && H5Z_xform_destroy(data_xform_prop) < 0) + HDONE_ERROR(H5E_PLINE, H5E_CLOSEERROR, FAIL, "unable to release data transform expression") } /* end if */ FUNC_LEAVE_API(ret_value) @@ -722,21 +623,19 @@ done: * Programmer: Robb Matzke * Monday, March 16, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv, void *bkg) { H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE4("e", "iz*x*x", plist_id, size, tconv, bkg); /* Check arguments */ - if (size<=0) + if(size == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "buffer size must not be zero") /* Get the plist structure */ @@ -744,16 +643,16 @@ H5Pset_buffer(hid_t plist_id, size_t size, void *tconv, void *bkg) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Update property list */ - if(H5P_set(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size)<0) + if(H5P_set(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "Can't set transfer buffer size") - if(H5P_set(plist, H5D_XFER_TCONV_BUF_NAME, &tconv)<0) + if(H5P_set(plist, H5D_XFER_TCONV_BUF_NAME, &tconv) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "Can't set transfer type conversion buffer") - if(H5P_set(plist, H5D_XFER_BKGR_BUF_NAME, &bkg)<0) + if(H5P_set(plist, H5D_XFER_BKGR_BUF_NAME, &bkg) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "Can't set background type conversion buffer") done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pset_buffer() */ /*------------------------------------------------------------------------- @@ -768,8 +667,6 @@ done: * Programmer: Robb Matzke * Monday, March 16, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ size_t @@ -783,27 +680,27 @@ H5Pget_buffer(hid_t plist_id, void **tconv/*out*/, void **bkg/*out*/) H5TRACE3("z", "ixx", plist_id, tconv, bkg); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, 0, "can't find object for ID") /* Return values */ - if (tconv) - if(H5P_get(plist, H5D_XFER_TCONV_BUF_NAME, tconv)<0) + if(tconv) + if(H5P_get(plist, H5D_XFER_TCONV_BUF_NAME, tconv) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, 0, "Can't get transfer type conversion buffer") - if (bkg) - if(H5P_get(plist, H5D_XFER_BKGR_BUF_NAME, bkg)<0) + if(bkg) + if(H5P_get(plist, H5D_XFER_BKGR_BUF_NAME, bkg) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, 0, "Can't get background type conversion buffer") /* Get the size */ - if(H5P_get(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size)<0) + if(H5P_get(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, 0, "Can't set transfer buffer size") /* Set the return value */ - ret_value=size; + ret_value = size; done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pget_buffer() */ /*------------------------------------------------------------------------- @@ -820,32 +717,30 @@ done: * Programmer: Robb Matzke * Tuesday, March 17, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pset_preserve(hid_t plist_id, hbool_t status) { - H5T_bkg_t need_bkg; /* Value for background buffer type */ H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + H5T_bkg_t need_bkg; /* Value for background buffer type */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "ib", plist_id, status); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Update property list */ need_bkg = status ? H5T_BKG_YES : H5T_BKG_NO; - if (H5P_set(plist,H5D_XFER_BKGR_BUF_TYPE_NAME,&need_bkg)<0) + if(H5P_set(plist, H5D_XFER_BKGR_BUF_TYPE_NAME, &need_bkg) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pset_preserve() */ /*------------------------------------------------------------------------- @@ -860,8 +755,6 @@ done: * Programmer: Robb Matzke * Tuesday, March 17, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ int @@ -875,19 +768,19 @@ H5Pget_preserve(hid_t plist_id) H5TRACE1("Is", "i", plist_id); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Get value */ - if (H5P_get(plist,H5D_XFER_BKGR_BUF_TYPE_NAME,&need_bkg)<0) + if(H5P_get(plist, H5D_XFER_BKGR_BUF_TYPE_NAME, &need_bkg) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") /* Set return value */ - ret_value= need_bkg ? TRUE : FALSE; + ret_value = need_bkg ? TRUE : FALSE; done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pget_preserve() */ /*------------------------------------------------------------------------- @@ -903,21 +796,19 @@ done: * Programmer: Raymond Lu * Jan 3, 2003 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check) { H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "iZe", plist_id, check); /* Check argument */ - if (check != H5Z_ENABLE_EDC && check != H5Z_DISABLE_EDC) + if(check != H5Z_ENABLE_EDC && check != H5Z_DISABLE_EDC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a valid value") /* Get the plist structure */ @@ -925,12 +816,12 @@ H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Update property list */ - if (H5P_set(plist,H5D_XFER_EDC_NAME,&check)<0) + if(H5P_set(plist, H5D_XFER_EDC_NAME, &check) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pset_edc_check() */ /*------------------------------------------------------------------------- @@ -946,15 +837,13 @@ done: * Programmer: Raymond Lu * Jan 3, 2003 * - * Modifications: - * *------------------------------------------------------------------------- */ H5Z_EDC_t H5Pget_edc_check(hid_t plist_id) { H5P_genplist_t *plist; /* Property list pointer */ - H5Z_EDC_t ret_value; /* return value */ + H5Z_EDC_t ret_value; /* Return value */ FUNC_ENTER_API(H5Z_ERROR_EDC) H5TRACE1("Ze", "i", plist_id); @@ -964,16 +853,12 @@ H5Pget_edc_check(hid_t plist_id) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, H5Z_ERROR_EDC, "can't find object for ID") /* Update property list */ - if (H5P_get(plist,H5D_XFER_EDC_NAME,&ret_value)<0) + if(H5P_get(plist, H5D_XFER_EDC_NAME, &ret_value) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, H5Z_ERROR_EDC, "unable to set value") - /* check valid value */ - if (ret_value != H5Z_ENABLE_EDC && ret_value != H5Z_DISABLE_EDC) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5Z_ERROR_EDC, "not a valid value") - done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pget_edc_check() */ /*------------------------------------------------------------------------- @@ -1116,40 +1001,38 @@ done: * Programmer: Robb Matzke * Monday, September 28, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/, double *middle/*out*/, - double *right/*out*/) + double *right/*out*/) { + H5P_genplist_t *plist; /* Property list pointer */ double btree_split_ratio[3]; /* B-tree node split ratios */ - H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE4("e", "ixxx", plist_id, left, middle, right); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Get the split ratios */ - if (H5P_get(plist,H5D_XFER_BTREE_SPLIT_RATIO_NAME,&btree_split_ratio)<0) + if(H5P_get(plist, H5D_XFER_BTREE_SPLIT_RATIO_NAME, &btree_split_ratio) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") /* Get values */ - if (left) + if(left) *left = btree_split_ratio[0]; - if (middle) + if(middle) *middle = btree_split_ratio[1]; - if (right) + if(right) *right = btree_split_ratio[2]; done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pget_btree_ratios() */ /*------------------------------------------------------------------------- @@ -1170,28 +1053,26 @@ done: * Programmer: Robb Matzke * Monday, September 28, 1998 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pset_btree_ratios(hid_t plist_id, double left, double middle, - double right) + double right) { - double split_ratio[3]; /* B-tree node split ratios */ H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + double split_ratio[3]; /* B-tree node split ratios */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE4("e", "iddd", plist_id, left, middle, right); /* Check arguments */ - if (left<0.0 || left>1.0 || middle<0.0 || middle>1.0 || - right<0.0 || right>1.0) + if(left < 0.0 || left > 1.0 || middle < 0.0 || middle > 1.0 || + right < 0.0 || right > 1.0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "split ratio must satisfy 0.0<=X<=1.0") /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Set values */ @@ -1200,12 +1081,12 @@ H5Pset_btree_ratios(hid_t plist_id, double left, double middle, split_ratio[2] = right; /* Set the split ratios */ - if (H5P_set(plist,H5D_XFER_BTREE_SPLIT_RATIO_NAME,&split_ratio)<0) + if(H5P_set(plist, H5D_XFER_BTREE_SPLIT_RATIO_NAME, &split_ratio) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pset_btree_ratios() */ /*------------------------------------------------------------------------- @@ -1225,28 +1106,26 @@ done: * Programmer: Quincey Koziol * Thursday, July 1, 1999 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5P_set_vlen_mem_manager(H5P_genplist_t *plist, H5MM_allocate_t alloc_func, - void *alloc_info, H5MM_free_t free_func, void *free_info) + void *alloc_info, H5MM_free_t free_func, void *free_info) { - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) - assert(plist); + HDassert(plist); /* Update property list */ - if (H5P_set(plist,H5D_XFER_VLEN_ALLOC_NAME,&alloc_func)<0) + if(H5P_set(plist, H5D_XFER_VLEN_ALLOC_NAME, &alloc_func) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") - if (H5P_set(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&alloc_info)<0) + if(H5P_set(plist, H5D_XFER_VLEN_ALLOC_INFO_NAME, &alloc_info) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") - if (H5P_set(plist,H5D_XFER_VLEN_FREE_NAME,&free_func)<0) + if(H5P_set(plist, H5D_XFER_VLEN_FREE_NAME, &free_func) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") - if (H5P_set(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&free_info)<0) + if(H5P_set(plist, H5D_XFER_VLEN_FREE_INFO_NAME, &free_info) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") done: @@ -1271,27 +1150,25 @@ done: * Programmer: Quincey Koziol * Thursday, July 1, 1999 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pset_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t alloc_func, - void *alloc_info, H5MM_free_t free_func, void *free_info) + void *alloc_info, H5MM_free_t free_func, void *free_info) { H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE5("e", "ix*xx*x", plist_id, alloc_func, alloc_info, free_func, free_info); /* Check arguments */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list") /* Update property list */ - if (H5P_set_vlen_mem_manager(plist,alloc_func,alloc_info,free_func,free_info)<0) + if(H5P_set_vlen_mem_manager(plist, alloc_func, alloc_info, free_func, free_info) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set values") done: @@ -1309,42 +1186,38 @@ done: * Programmer: Quincey Koziol * Thursday, July 1, 1999 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pget_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t *alloc_func/*out*/, - void **alloc_info/*out*/, - H5MM_free_t *free_func/*out*/, - void **free_info/*out*/) + void **alloc_info/*out*/, H5MM_free_t *free_func/*out*/, void **free_info/*out*/) { H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE5("e", "ixxxx", plist_id, alloc_func, alloc_info, free_func, free_info); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") - if(alloc_func!=NULL) - if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,alloc_func)<0) + if(alloc_func) + if(H5P_get(plist, H5D_XFER_VLEN_ALLOC_NAME, alloc_func) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") - if(alloc_info!=NULL) - if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,alloc_info)<0) + if(alloc_info) + if(H5P_get(plist, H5D_XFER_VLEN_ALLOC_INFO_NAME, alloc_info) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") - if(free_func!=NULL) - if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,free_func)<0) + if(free_func) + if(H5P_get(plist, H5D_XFER_VLEN_FREE_NAME, free_func) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") - if(free_info!=NULL) - if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,free_info)<0) + if(free_info) + if(H5P_get(plist, H5D_XFER_VLEN_FREE_INFO_NAME, free_info) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") done: FUNC_LEAVE_API(ret_value) -} +} /* end H5Pget_vlen_mem_manager() */ /*------------------------------------------------------------------------- @@ -1366,29 +1239,27 @@ done: * Programmer: Quincey Koziol * Monday, July 9, 2001 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pset_hyper_vector_size(hid_t plist_id, size_t vector_size) { H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "iz", plist_id, vector_size); /* Check arguments */ - if (vector_size<1) + if(vector_size < 1) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "vector size too small") /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Update property list */ - if (H5P_set(plist,H5D_XFER_HYPER_VECTOR_SIZE_NAME,&vector_size)<0) + if(H5P_set(plist, H5D_XFER_HYPER_VECTOR_SIZE_NAME, &vector_size) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value") done: @@ -1406,34 +1277,32 @@ done: * Programmer: Quincey Koziol * Monday, July 9, 2001 * - * Modifications: - * *------------------------------------------------------------------------- */ herr_t H5Pget_hyper_vector_size(hid_t plist_id, size_t *vector_size/*out*/) { H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value=SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "ix", plist_id, vector_size); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER))) + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") /* Return values */ - if (vector_size) - if (H5P_get(plist,H5D_XFER_HYPER_VECTOR_SIZE_NAME,vector_size)<0) + if(vector_size) + if(H5P_get(plist, H5D_XFER_HYPER_VECTOR_SIZE_NAME, vector_size) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value") done: FUNC_LEAVE_API(ret_value) } /* end H5Pget_hyper_vector_size() */ - #ifdef H5_HAVE_PARALLEL + /*------------------------------------------------------------------------- * Function: H5Pget_mpio_actual_chunk_opt_mode * @@ -1443,6 +1312,7 @@ done: * * Programmer: Jacob Gruber * Wednesday, May 4, 2011 + * *------------------------------------------------------------------------- */ herr_t @@ -1478,6 +1348,7 @@ done: * * Programmer: Jacob Gruber * Wednesday, May 4, 2011 + * *------------------------------------------------------------------------- */ herr_t @@ -1501,5 +1372,44 @@ H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_ done: FUNC_LEAVE_API(ret_value) } /* end H5Pget_mpio_actual_io_mode() */ + +/*------------------------------------------------------------------------- + * Function: H5Pget_mpio_no_collective_cause + * + * Purpose: Retrieves cause for the broke collective I/O + * + * Return: Non-negative on success/Negative on failure + * + * Programmer: Jonathan Kim + * Aug 3, 2012 + *------------------------------------------------------------------------- + */ +herr_t +H5Pget_mpio_no_collective_cause(hid_t plist_id, H5D_mpio_no_collective_cause_t *local_no_collective_cause, H5D_mpio_no_collective_cause_t *global_no_collective_cause) +{ + H5P_genplist_t *plist; + herr_t ret_value = SUCCEED; /* return value */ + + FUNC_ENTER_API(FAIL) + H5TRACE3("e", "i*Dn*Dn", plist_id, local_no_collective_cause, + global_no_collective_cause); + + /* Get the plist structure */ + if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER))) + HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + + /* Return values */ + if(local_no_collective_cause) + if(H5P_get(plist, H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, local_no_collective_cause) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get local value") + if(global_no_collective_cause) + if(H5P_get(plist, H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, global_no_collective_cause) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get global value") + +done: + FUNC_LEAVE_API(ret_value) +} /* end H5Pget_mpio_no_collective_cause() */ + + #endif /* H5_HAVE_PARALLEL */ |