diff options
Diffstat (limited to 'src/H5Pgcpl.c')
| -rw-r--r-- | src/H5Pgcpl.c | 418 |
1 files changed, 296 insertions, 122 deletions
diff --git a/src/H5Pgcpl.c b/src/H5Pgcpl.c index 983929d..0fd3a68 100644 --- a/src/H5Pgcpl.c +++ b/src/H5Pgcpl.c @@ -1,23 +1,20 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * + * the COPYING file, which can be found at the root of the source code * + * distribution tree, or in https://www.hdfgroup.org/licenses. * + * If you do not have access to either file, you may request a copy from * + * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*------------------------------------------------------------------------- * * Created: H5Pgcpl.c * August 29 2006 - * Quincey Koziol <koziol@ncsa.uiuc.edu> + * Quincey Koziol * * Purpose: Group creation property list class routines * @@ -27,39 +24,49 @@ /****************/ /* Module Setup */ /****************/ -#define H5P_PACKAGE /*suppress error about including H5Ppkg */ + +#include "H5Pmodule.h" /* This source code file is part of the H5P module */ /***********/ /* Headers */ /***********/ -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5Iprivate.h" /* IDs */ -#include "H5Ppkg.h" /* Property lists */ - +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Gprivate.h" /* Groups */ +#include "H5Iprivate.h" /* IDs */ +#include "H5Oprivate.h" /* Object headers */ +#include "H5Ppkg.h" /* Property lists */ /****************/ /* Local Macros */ /****************/ +/* ========= Group Creation properties ============ */ +#define H5G_CRT_GROUP_INFO_ENC H5P__gcrt_group_info_enc +#define H5G_CRT_GROUP_INFO_DEC H5P__gcrt_group_info_dec +#define H5G_CRT_LINK_INFO_ENC H5P__gcrt_link_info_enc +#define H5G_CRT_LINK_INFO_DEC H5P__gcrt_link_info_dec /******************/ /* Local Typedefs */ /******************/ - /********************/ /* Package Typedefs */ /********************/ - /********************/ /* Local Prototypes */ /********************/ /* Property class callbacks */ -static herr_t H5P_gcrt_reg_prop(H5P_genclass_t *pclass); +static herr_t H5P__gcrt_reg_prop(H5P_genclass_t *pclass); +/* Property callbacks */ +static herr_t H5P__gcrt_group_info_enc(const void *value, void **_pp, size_t *size); +static herr_t H5P__gcrt_group_info_dec(const void **_pp, void *value); +static herr_t H5P__gcrt_link_info_enc(const void *value, void **_pp, size_t *size); +static herr_t H5P__gcrt_link_info_dec(const void **_pp, void *value); /*********************/ /* Package Variables */ @@ -67,33 +74,37 @@ static herr_t H5P_gcrt_reg_prop(H5P_genclass_t *pclass); /* Group creation property list class library initialization object */ const H5P_libclass_t H5P_CLS_GCRT[1] = {{ - "group create", /* Class name for debugging */ - &H5P_CLS_OBJECT_CREATE_g, /* Parent class ID */ - &H5P_CLS_GROUP_CREATE_g, /* Pointer to class ID */ - &H5P_LST_GROUP_CREATE_g, /* Pointer to default property list ID */ - H5P_gcrt_reg_prop, /* Default property registration routine */ - NULL, /* Class creation callback */ - NULL, /* Class creation callback info */ - NULL, /* Class copy callback */ - NULL, /* Class copy callback info */ - NULL, /* Class close callback */ - NULL /* Class close callback info */ + "group create", /* Class name for debugging */ + H5P_TYPE_GROUP_CREATE, /* Class type */ + + &H5P_CLS_OBJECT_CREATE_g, /* Parent class */ + &H5P_CLS_GROUP_CREATE_g, /* Pointer to class */ + &H5P_CLS_GROUP_CREATE_ID_g, /* Pointer to class ID */ + &H5P_LST_GROUP_CREATE_ID_g, /* Pointer to default property list ID */ + H5P__gcrt_reg_prop, /* Default property registration routine */ + + NULL, /* Class creation callback */ + NULL, /* Class creation callback info */ + NULL, /* Class copy callback */ + NULL, /* Class copy callback info */ + NULL, /* Class close callback */ + NULL /* Class close callback info */ }}; - /*****************************/ /* Library Private Variables */ /*****************************/ - /*******************/ /* Local Variables */ /*******************/ +/* Property value defaults */ +static const H5O_ginfo_t H5G_def_ginfo_g = H5G_CRT_GROUP_INFO_DEF; /* Default group info settings */ +static const H5O_linfo_t H5G_def_linfo_g = H5G_CRT_LINK_INFO_DEF; /* Default link info settings */ - /*------------------------------------------------------------------------- - * Function: H5P_gcrt_reg_prop + * Function: H5P__gcrt_reg_prop * * Purpose: Initialize the group creation property list class * @@ -104,27 +115,28 @@ const H5P_libclass_t H5P_CLS_GCRT[1] = {{ *------------------------------------------------------------------------- */ static herr_t -H5P_gcrt_reg_prop(H5P_genclass_t *pclass) +H5P__gcrt_reg_prop(H5P_genclass_t *pclass) { - H5O_ginfo_t ginfo = H5G_CRT_GROUP_INFO_DEF; /* Default group info settings */ - H5O_linfo_t linfo = H5G_CRT_LINK_INFO_DEF; /* Default link info settings */ - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER_NOAPI_NOINIT + FUNC_ENTER_PACKAGE /* Register group info property */ - if(H5P_register_real(pclass, H5G_CRT_GROUP_INFO_NAME, H5G_CRT_GROUP_INFO_SIZE, &ginfo, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") + if (H5P__register_real(pclass, H5G_CRT_GROUP_INFO_NAME, H5G_CRT_GROUP_INFO_SIZE, &H5G_def_ginfo_g, NULL, + NULL, NULL, H5G_CRT_GROUP_INFO_ENC, H5G_CRT_GROUP_INFO_DEC, NULL, NULL, NULL, + NULL) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") /* Register link info property */ - if(H5P_register_real(pclass, H5G_CRT_LINK_INFO_NAME, H5G_CRT_LINK_INFO_SIZE, &linfo, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") + if (H5P__register_real(pclass, H5G_CRT_LINK_INFO_NAME, H5G_CRT_LINK_INFO_SIZE, &H5G_def_linfo_g, NULL, + NULL, NULL, H5G_CRT_LINK_INFO_ENC, H5G_CRT_LINK_INFO_DEC, NULL, NULL, NULL, + NULL) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class") done: FUNC_LEAVE_NOAPI(ret_value) -} /* end H5P_gcrt_reg_prop() */ +} /* end H5P__gcrt_reg_prop() */ - /*------------------------------------------------------------------------- * Function: H5Pset_local_heap_size_hint * @@ -139,33 +151,32 @@ done: herr_t H5Pset_local_heap_size_hint(hid_t plist_id, size_t size_hint) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_ginfo_t ginfo; /* Group information structure */ - herr_t ret_value = SUCCEED; /* Return value */ + H5P_genplist_t *plist; /* Property list pointer */ + H5O_ginfo_t ginfo; /* Group information structure */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "iz", plist_id, size_hint); /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get value */ - if(H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info") /* Update field */ - ginfo.lheap_size_hint = size_hint; + H5_CHECKED_ASSIGN(ginfo.lheap_size_hint, uint32_t, size_hint, size_t); /* Set value */ - if(H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set group info") done: FUNC_LEAVE_API(ret_value) } /* end H5Pset_local_heap_size_hint() */ - /*------------------------------------------------------------------------- * Function: H5Pget_local_heap_size_hint * @@ -181,21 +192,21 @@ done: herr_t H5Pget_local_heap_size_hint(hid_t plist_id, size_t *size_hint /*out*/) { - herr_t ret_value = SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "ix", plist_id, size_hint); - if(size_hint) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_ginfo_t ginfo; /* Group information structure */ + if (size_hint) { + H5P_genplist_t *plist; /* Property list pointer */ + H5O_ginfo_t ginfo; /* Group information structure */ /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get value */ - if(H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info") /* Update field */ @@ -206,7 +217,6 @@ done: FUNC_LEAVE_API(ret_value) } /* end H5Pget_local_heap_size_hint() */ - /*------------------------------------------------------------------------- * Function: H5Pset_link_phase_change * @@ -227,46 +237,45 @@ done: herr_t H5Pset_link_phase_change(hid_t plist_id, unsigned max_compact, unsigned min_dense) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_ginfo_t ginfo; /* Group information structure */ - herr_t ret_value = SUCCEED; /* Return value */ + H5P_genplist_t *plist; /* Property list pointer */ + H5O_ginfo_t ginfo; /* Group information structure */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE3("e", "iIuIu", plist_id, max_compact, min_dense); /* Range check values */ - if(max_compact < min_dense) + if (max_compact < min_dense) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "max compact value must be >= min dense value") - if(max_compact > 65535) + if (max_compact > 65535) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "max compact value must be < 65536") - if(min_dense > 65535) + if (min_dense > 65535) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "min dense value must be < 65536") /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get group info */ - if(H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info") /* Update fields */ - if(max_compact != H5G_CRT_GINFO_MAX_COMPACT || min_dense != H5G_CRT_GINFO_MIN_DENSE) + if (max_compact != H5G_CRT_GINFO_MAX_COMPACT || min_dense != H5G_CRT_GINFO_MIN_DENSE) ginfo.store_link_phase_change = TRUE; else ginfo.store_link_phase_change = FALSE; ginfo.max_compact = (uint16_t)max_compact; - ginfo.min_dense = (uint16_t)min_dense; + ginfo.min_dense = (uint16_t)min_dense; /* Set group info */ - if(H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set group info") done: FUNC_LEAVE_API(ret_value) } /* end H5Pset_link_phase_change() */ - /*------------------------------------------------------------------------- * Function: H5Pget_link_phase_change * @@ -282,27 +291,27 @@ done: herr_t H5Pget_link_phase_change(hid_t plist_id, unsigned *max_compact /*out*/, unsigned *min_dense /*out*/) { - herr_t ret_value = SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE3("e", "ixx", plist_id, max_compact, min_dense); /* Get values */ - if(max_compact || min_dense) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_ginfo_t ginfo; /* Group information structure */ + if (max_compact || min_dense) { + H5P_genplist_t *plist; /* Property list pointer */ + H5O_ginfo_t ginfo; /* Group information structure */ /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get group info */ - if(H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info") - if(max_compact) + if (max_compact) *max_compact = ginfo.max_compact; - if(min_dense) + if (min_dense) *min_dense = ginfo.min_dense; } /* end if */ @@ -310,7 +319,6 @@ done: FUNC_LEAVE_API(ret_value) } /* end H5Pget_link_phase_change() */ - /*------------------------------------------------------------------------- * Function: H5Pset_est_link_info * @@ -333,44 +341,43 @@ done: herr_t H5Pset_est_link_info(hid_t plist_id, unsigned est_num_entries, unsigned est_name_len) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_ginfo_t ginfo; /* Group information structure */ - herr_t ret_value = SUCCEED; /* Return value */ + H5P_genplist_t *plist; /* Property list pointer */ + H5O_ginfo_t ginfo; /* Group information structure */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE3("e", "iIuIu", plist_id, est_num_entries, est_name_len); /* Range check values */ - if(est_num_entries > 65535) + if (est_num_entries > 65535) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "est. number of entries must be < 65536") - if(est_name_len > 65535) + if (est_name_len > 65535) HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "est. name length must be < 65536") /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get group info */ - if(H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info") /* Update fields */ - if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES || est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) + if (est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES || est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) ginfo.store_est_entry_info = TRUE; else ginfo.store_est_entry_info = FALSE; ginfo.est_num_entries = (uint16_t)est_num_entries; - ginfo.est_name_len = (uint16_t)est_name_len; + ginfo.est_name_len = (uint16_t)est_name_len; /* Set group info */ - if(H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_set(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set group info") done: FUNC_LEAVE_API(ret_value) } /* end H5Pset_est_link_info() */ - /*------------------------------------------------------------------------- * Function: H5Pget_est_link_info * @@ -386,27 +393,27 @@ done: herr_t H5Pget_est_link_info(hid_t plist_id, unsigned *est_num_entries /*out*/, unsigned *est_name_len /*out*/) { - herr_t ret_value = SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE3("e", "ixx", plist_id, est_num_entries, est_name_len); /* Get values */ - if(est_num_entries || est_name_len) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_ginfo_t ginfo; /* Group information structure */ + if (est_num_entries || est_name_len) { + H5P_genplist_t *plist; /* Property list pointer */ + H5O_ginfo_t ginfo; /* Group information structure */ /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get group info */ - if(H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) + if (H5P_get(plist, H5G_CRT_GROUP_INFO_NAME, &ginfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get group info") - if(est_num_entries) + if (est_num_entries) *est_num_entries = ginfo.est_num_entries; - if(est_name_len) + if (est_name_len) *est_name_len = ginfo.est_name_len; } /* end if */ @@ -414,7 +421,6 @@ done: FUNC_LEAVE_API(ret_value) } /* end H5Pget_est_link_info() */ - /*------------------------------------------------------------------------- * Function: H5Pset_link_creation_order * @@ -429,23 +435,23 @@ done: herr_t H5Pset_link_creation_order(hid_t plist_id, unsigned crt_order_flags) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_linfo_t linfo; /* Link information structure */ - herr_t ret_value = SUCCEED; /* Return value */ + H5P_genplist_t *plist; /* Property list pointer */ + H5O_linfo_t linfo; /* Link information structure */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "iIu", plist_id, crt_order_flags); - /* Check for bad combination of flags */ - if(!(crt_order_flags & H5P_CRT_ORDER_TRACKED) && (crt_order_flags & H5P_CRT_ORDER_INDEXED)) + /* Check for bad combination of flags */ + if (!(crt_order_flags & H5P_CRT_ORDER_TRACKED) && (crt_order_flags & H5P_CRT_ORDER_INDEXED)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "tracking creation order is required for index") /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get link info */ - if(H5P_get(plist, H5G_CRT_LINK_INFO_NAME, &linfo) < 0) + if (H5P_get(plist, H5G_CRT_LINK_INFO_NAME, &linfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get link info") /* Update fields */ @@ -453,14 +459,13 @@ H5Pset_link_creation_order(hid_t plist_id, unsigned crt_order_flags) linfo.index_corder = (hbool_t)((crt_order_flags & H5P_CRT_ORDER_INDEXED) ? TRUE : FALSE); /* Set link info */ - if(H5P_set(plist, H5G_CRT_LINK_INFO_NAME, &linfo) < 0) + if (H5P_set(plist, H5G_CRT_LINK_INFO_NAME, &linfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set link info") done: FUNC_LEAVE_API(ret_value) } /* end H5Pset_link_creation_order() */ - /*------------------------------------------------------------------------- * Function: H5Pget_link_creation_order * @@ -476,25 +481,25 @@ done: herr_t H5Pget_link_creation_order(hid_t plist_id, unsigned *crt_order_flags /*out*/) { - herr_t ret_value = SUCCEED; /* return value */ + herr_t ret_value = SUCCEED; /* return value */ FUNC_ENTER_API(FAIL) H5TRACE2("e", "ix", plist_id, crt_order_flags); /* Get values */ - if(crt_order_flags) { - H5P_genplist_t *plist; /* Property list pointer */ - H5O_linfo_t linfo; /* Link information structure */ + if (crt_order_flags) { + H5P_genplist_t *plist; /* Property list pointer */ + H5O_linfo_t linfo; /* Link information structure */ /* Reset the value to return */ *crt_order_flags = 0; /* Get the plist structure */ - if(NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) - HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID") + if (NULL == (plist = H5P_object_verify(plist_id, H5P_GROUP_CREATE))) + HGOTO_ERROR(H5E_ID, H5E_BADID, FAIL, "can't find object for ID") /* Get link info */ - if(H5P_get(plist, H5G_CRT_LINK_INFO_NAME, &linfo) < 0) + if (H5P_get(plist, H5G_CRT_LINK_INFO_NAME, &linfo) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get link info") *crt_order_flags |= linfo.track_corder ? H5P_CRT_ORDER_TRACKED : 0; @@ -505,3 +510,172 @@ done: FUNC_LEAVE_API(ret_value) } /* end H5Pget_link_creation_order() */ +/*------------------------------------------------------------------------- + * Function: H5P__gcrt_group_info_enc + * + * Purpose: Callback routine which is called whenever the group + * property in the dataset access property list is + * encoded. + * + * Return: Success: Non-negative + * Failure: Negative + * + * Programmer: Mohamad Chaarawi + * Monday, October 10, 2011 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5P__gcrt_group_info_enc(const void *value, void **_pp, size_t *size) +{ + const H5O_ginfo_t *ginfo = (const H5O_ginfo_t *)value; /* Create local aliases for values */ + uint8_t **pp = (uint8_t **)_pp; + + FUNC_ENTER_PACKAGE_NOERR + + if (NULL != *pp) { + UINT32ENCODE(*pp, ginfo->lheap_size_hint) + UINT16ENCODE(*pp, ginfo->max_compact) + UINT16ENCODE(*pp, ginfo->min_dense) + UINT16ENCODE(*pp, ginfo->est_num_entries) + UINT16ENCODE(*pp, ginfo->est_name_len) + } /* end if */ + + *size += sizeof(uint16_t) * 4 + sizeof(uint32_t); + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5P__gcrt_group_info_enc() */ + +/*------------------------------------------------------------------------- + * Function: H5P__gcrt_group_info_dec + * + * Purpose: Callback routine which is called whenever the group info + * property in the dataset access property list is + * decoded. + * + * Return: Success: Non-negative + * Failure: Negative + * + * Programmer: Mohamad Chaarawi + * Monday, October 10, 2011 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5P__gcrt_group_info_dec(const void **_pp, void *_value) +{ + H5O_ginfo_t *ginfo = (H5O_ginfo_t *)_value; /* Group info settings */ + const uint8_t **pp = (const uint8_t **)_pp; + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE_NOERR + + /* Set property to default value */ + HDmemset(ginfo, 0, sizeof(H5O_ginfo_t)); + *ginfo = H5G_def_ginfo_g; + + UINT32DECODE(*pp, ginfo->lheap_size_hint) + UINT16DECODE(*pp, ginfo->max_compact) + UINT16DECODE(*pp, ginfo->min_dense) + UINT16DECODE(*pp, ginfo->est_num_entries) + UINT16DECODE(*pp, ginfo->est_name_len) + + /* Update fields */ + if (ginfo->max_compact != H5G_CRT_GINFO_MAX_COMPACT || ginfo->min_dense != H5G_CRT_GINFO_MIN_DENSE) + ginfo->store_link_phase_change = TRUE; + else + ginfo->store_link_phase_change = FALSE; + + if (ginfo->est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES || + ginfo->est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) + ginfo->store_est_entry_info = TRUE; + else + ginfo->store_est_entry_info = FALSE; + + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5P__gcrt_group_info_dec() */ + +/*------------------------------------------------------------------------- + * Function: H5P__gcrt_link_info_enc + * + * Purpose: Callback routine which is called whenever the link + * property in the dataset access property list is + * encoded. + * + * Return: Success: Non-negative + * Failure: Negative + * + * Programmer: Mohamad Chaarawi + * Monday, October 10, 2011 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5P__gcrt_link_info_enc(const void *value, void **_pp, size_t *size) +{ + const H5O_linfo_t *linfo = (const H5O_linfo_t *)value; /* Create local aliases for values */ + uint8_t **pp = (uint8_t **)_pp; + + FUNC_ENTER_PACKAGE_NOERR + + if (NULL != *pp) { + unsigned crt_order_flags = 0; + + crt_order_flags |= linfo->track_corder ? H5P_CRT_ORDER_TRACKED : 0; + crt_order_flags |= linfo->index_corder ? H5P_CRT_ORDER_INDEXED : 0; + + /* Encode the size of unsigned*/ + *(*pp)++ = (uint8_t)sizeof(unsigned); + + /* Encode the value */ + H5_ENCODE_UNSIGNED(*pp, crt_order_flags) + } /* end if */ + + *size += (1 + sizeof(unsigned)); + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* end H5P__gcrt_link_info_enc() */ + +/*------------------------------------------------------------------------- + * Function: H5P__gcrt_link_info_dec + * + * Purpose: Callback routine which is called whenever the link info + * property in the dataset access property list is + * decoded. + * + * Return: Success: Non-negative + * Failure: Negative + * + * Programmer: Mohamad Chaarawi + * Monday, October 10, 2011 + * + *------------------------------------------------------------------------- + */ +static herr_t +H5P__gcrt_link_info_dec(const void **_pp, void *_value) +{ + H5O_linfo_t *linfo = (H5O_linfo_t *)_value; /* Link info settings */ + const uint8_t **pp = (const uint8_t **)_pp; + unsigned crt_order_flags; + unsigned enc_size; + herr_t ret_value = SUCCEED; /* Return value */ + + FUNC_ENTER_PACKAGE + + enc_size = *(*pp)++; + if (enc_size != sizeof(unsigned)) + HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "unsigned value can't be decoded") + + /* Set property to default value */ + HDmemset(linfo, 0, sizeof(H5O_linfo_t)); + *linfo = H5G_def_linfo_g; + + H5_DECODE_UNSIGNED(*pp, crt_order_flags) + + /* Update fields */ + linfo->track_corder = (hbool_t)((crt_order_flags & H5P_CRT_ORDER_TRACKED) ? TRUE : FALSE); + linfo->index_corder = (hbool_t)((crt_order_flags & H5P_CRT_ORDER_INDEXED) ? TRUE : FALSE); + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* end H5P__gcrt_link_info_dec() */ |
