summaryrefslogtreecommitdiffstats
path: root/src/H5Pgcpl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5Pgcpl.c')
-rw-r--r--src/H5Pgcpl.c418
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() */