Move 'minimize dataset object header flag' into API context
This commit is contained in:
97
src/H5CX.c
97
src/H5CX.c
@@ -186,6 +186,10 @@ typedef struct H5CX_t {
|
||||
hid_t lapl_id; /* LAPL ID for API operation */
|
||||
H5P_genplist_t *lapl; /* Link Access Property List */
|
||||
|
||||
/* DCPL */
|
||||
hid_t dcpl_id; /* DCPL ID for API operation */
|
||||
H5P_genplist_t *dcpl; /* Dataset Creation Property List */
|
||||
|
||||
/* Internal: Object tagging info */
|
||||
haddr_t tag; /* Current object's tag (ohdr chunk #0 address) */
|
||||
|
||||
@@ -271,6 +275,10 @@ typedef struct H5CX_t {
|
||||
size_t nlinks; /* Number of soft / UD links to traverse (H5L_ACS_NLINKS_NAME) */
|
||||
hbool_t nlinks_valid; /* Whether number of soft / UD links to traverse is valid */
|
||||
|
||||
/* Cached DCPL properties */
|
||||
hbool_t do_min_dset_ohdr; /* Whether to minimize dataset object header */
|
||||
hbool_t do_min_dset_ohdr_valid; /* Whether minimize dataset object header flag is valid */
|
||||
|
||||
/* Cached VOL settings */
|
||||
H5VL_connector_prop_t vol_connector_prop; /* Property for VOL connector ID & info */
|
||||
hbool_t vol_connector_prop_valid; /* Whether property for VOL connector ID & info is valid */
|
||||
@@ -325,6 +333,12 @@ typedef struct H5CX_lapl_cache_t {
|
||||
size_t nlinks; /* Number of soft / UD links to traverse (H5L_ACS_NLINKS_NAME) */
|
||||
} H5CX_lapl_cache_t;
|
||||
|
||||
/* Typedef for cached default dataset creation property list information */
|
||||
/* (Same as the cached DXPL struct, above, except for the default DCPL) */
|
||||
typedef struct H5CX_dcpl_cache_t {
|
||||
hbool_t do_min_dset_ohdr; /* Whether to minimize dataset object header */
|
||||
} H5CX_dcpl_cache_t;
|
||||
|
||||
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
@@ -358,6 +372,9 @@ static H5CX_dxpl_cache_t H5CX_def_dxpl_cache;
|
||||
/* Define a "default" link access property list cache structure to use for default LAPLs */
|
||||
static H5CX_lapl_cache_t H5CX_def_lapl_cache;
|
||||
|
||||
/* Define a "default" dataset creation property list cache structure to use for default DCPLs */
|
||||
static H5CX_dcpl_cache_t H5CX_def_dcpl_cache;
|
||||
|
||||
/* Declare a static free list to manage H5CX_node_t structs */
|
||||
H5FL_DEFINE_STATIC(H5CX_node_t);
|
||||
|
||||
@@ -378,6 +395,7 @@ H5CX__init_package(void)
|
||||
{
|
||||
H5P_genplist_t *dx_plist; /* Data transfer property list */
|
||||
H5P_genplist_t *la_plist; /* Link access property list */
|
||||
H5P_genplist_t *dc_plist; /* Dataset creation property list */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_STATIC
|
||||
@@ -477,6 +495,20 @@ H5CX__init_package(void)
|
||||
if(H5P_get(la_plist, H5L_ACS_NLINKS_NAME, &H5CX_def_lapl_cache.nlinks) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve number of soft / UD links to traverse")
|
||||
|
||||
|
||||
/* Reset the "default DCPL cache" information */
|
||||
HDmemset(&H5CX_def_dcpl_cache, 0, sizeof(H5CX_dcpl_cache_t));
|
||||
|
||||
/* Get the default DCPL cache information */
|
||||
|
||||
/* Get the default link access property list */
|
||||
if(NULL == (dc_plist = (H5P_genplist_t *)H5I_object(H5P_DATASET_CREATE_DEFAULT)))
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_BADTYPE, FAIL, "not a dataset create property list")
|
||||
|
||||
/* Get flag to indicate whether to minimize dataset object header */
|
||||
if(H5P_get(dc_plist, H5D_CRT_MIN_DSET_HDR_SIZE_NAME, &H5CX_def_dcpl_cache.do_min_dset_ohdr) < 0)
|
||||
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "Can't retrieve dataset minimize flag")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX__init_package() */
|
||||
@@ -730,6 +762,35 @@ H5CX_set_dxpl(hid_t dxpl_id)
|
||||
FUNC_LEAVE_NOAPI_VOID
|
||||
} /* end H5CX_set_dxpl() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_set_dcpl
|
||||
*
|
||||
* Purpose: Sets the DCPL for the current API call context.
|
||||
*
|
||||
* Return: <none>
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* March 6, 2019
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void
|
||||
H5CX_set_dcpl(hid_t dcpl_id)
|
||||
{
|
||||
H5CX_node_t **head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOERR
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(*head);
|
||||
|
||||
/* Set the API context's DCPL to a new value */
|
||||
(*head)->ctx.dcpl_id = dcpl_id;
|
||||
|
||||
FUNC_LEAVE_NOAPI_VOID
|
||||
} /* end H5CX_set_dcpl() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_set_lapl
|
||||
@@ -1999,6 +2060,42 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX_get_nlinks() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_get_dset_min_ohdr_flag
|
||||
*
|
||||
* Purpose: Retrieves the flag that indicates whether the dataset object
|
||||
* header should be minimized
|
||||
*
|
||||
* Return: Non-negative on success / Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* March 6, 2019
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5CX_get_dset_min_ohdr_flag(hbool_t *dset_min_ohdr_flag)
|
||||
{
|
||||
H5CX_node_t **head = H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(FAIL)
|
||||
|
||||
/* Sanity check */
|
||||
HDassert(dset_min_ohdr_flag);
|
||||
HDassert(head && *head);
|
||||
HDassert(H5P_DEFAULT != (*head)->ctx.dcpl_id);
|
||||
|
||||
H5CX_RETRIEVE_PROP_VALID(dcpl, H5P_DATASET_CREATE_DEFAULT, H5D_CRT_MIN_DSET_HDR_SIZE_NAME, do_min_dset_ohdr)
|
||||
|
||||
/* Get the value */
|
||||
*dset_min_ohdr_flag = (*head)->ctx.do_min_dset_ohdr;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5CX_get_dset_min_ohdr_flag() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5CX_set_tag
|
||||
|
||||
@@ -60,6 +60,7 @@ H5_DLL hbool_t H5CX_is_def_dxpl(void);
|
||||
/* "Setter" routines for API context info */
|
||||
H5_DLL void H5CX_set_dxpl(hid_t dxpl_id);
|
||||
H5_DLL void H5CX_set_lapl(hid_t lapl_id);
|
||||
H5_DLL void H5CX_set_dcpl(hid_t dcpl_id);
|
||||
H5_DLL herr_t H5CX_set_apl(hid_t *acspl_id, const H5P_libclass_t *libclass,
|
||||
hid_t loc_id, hbool_t is_collective);
|
||||
H5_DLL herr_t H5CX_set_loc(hid_t loc_id);
|
||||
@@ -105,6 +106,9 @@ H5_DLL herr_t H5CX_get_dt_conv_cb(H5T_conv_cb_t *cb_struct);
|
||||
/* "Getter" routines for LAPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_nlinks(size_t *nlinks);
|
||||
|
||||
/* "Getter" routines for DCPL properties cached in API context */
|
||||
H5_DLL herr_t H5CX_get_dset_min_ohdr_flag(hbool_t *dset_min_ohdr_flag);
|
||||
|
||||
/* "Setter" routines for API context info */
|
||||
H5_DLL void H5CX_set_tag(haddr_t tag);
|
||||
H5_DLL void H5CX_set_ring(H5AC_ring_t ring);
|
||||
|
||||
12
src/H5Dint.c
12
src/H5Dint.c
@@ -488,6 +488,9 @@ H5D__new(hid_t dcpl_id, hbool_t creating, hbool_t vl_type)
|
||||
new_dset->dcpl_id = H5P_copy_plist(plist, FALSE);
|
||||
} /* end else */
|
||||
|
||||
/* Set the DCPL for the API context */
|
||||
H5CX_set_dcpl(new_dset->dcpl_id);
|
||||
|
||||
/* Set return value */
|
||||
ret_value = new_dset;
|
||||
|
||||
@@ -678,7 +681,6 @@ done:
|
||||
static herr_t
|
||||
H5D__use_minimized_dset_headers(H5F_t *file, H5D_t *dset, hbool_t *minimize)
|
||||
{
|
||||
H5P_genplist_t *plist = NULL;
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT;
|
||||
@@ -687,11 +689,9 @@ H5D__use_minimized_dset_headers(H5F_t *file, H5D_t *dset, hbool_t *minimize)
|
||||
HDassert(dset);
|
||||
HDassert(minimize);
|
||||
|
||||
plist = H5P_object_verify(dset->shared->dcpl_id, H5P_DATASET_CREATE);
|
||||
if(NULL == plist)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "problem getting dcpl")
|
||||
if(H5P_get(plist, H5D_CRT_MIN_DSET_HDR_SIZE_NAME, minimize) == FAIL)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get minimize value from dcpl")
|
||||
/* Get the dataset object header minimize flag for this call */
|
||||
if(H5CX_get_dset_min_ohdr_flag(minimize) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset object header minimize flag from API context")
|
||||
|
||||
if(FALSE == *minimize)
|
||||
*minimize = H5F_get_min_dset_ohdr(file);
|
||||
|
||||
Reference in New Issue
Block a user