summaryrefslogtreecommitdiffstats
path: root/src/H5Pgcpl.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2005-11-15 02:55:39 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2005-11-15 02:55:39 (GMT)
commita1708eb023f2c8f8ac6c2c17bf1e598c8dff956e (patch)
tree34c87a3753b36c4c8d689d58bf456eaf261cd235 /src/H5Pgcpl.c
parentbea1e576c5ef5500678f7ce913d835341b625e8f (diff)
downloadhdf5-a1708eb023f2c8f8ac6c2c17bf1e598c8dff956e.zip
hdf5-a1708eb023f2c8f8ac6c2c17bf1e598c8dff956e.tar.gz
hdf5-a1708eb023f2c8f8ac6c2c17bf1e598c8dff956e.tar.bz2
[svn-r11712] Purpose:
New feature Description: Check in baseline for compact group revisions, which radically revises the source code for managing groups and object headers. WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! This initiates the "unstable" phase of the 1.7.x branch, leading up to the 1.8.0 release. Please test this code, but do _NOT_ keep files created with it - the format will change again before the release and you will not be able to read your old files!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! WARNING!!!! Solution: There's too many changes to really describe them all, but some of them include: - Stop abusing the H5G_entry_t structure and split it into two separate structures for non-symbol table node use within the library: H5O_loc_t for object locations in a file and H5G_name_t to store the path to an opened object. H5G_entry_t is now only used for storing symbol table entries on disk. - Retire H5G_namei() in favor of a more general mechanism for traversing group paths and issuing callbacks on objects located. This gets us out of the business of hacking H5G_namei() for new features, generally. - Revised H5O* routines to take a H5O_loc_t instead of H5G_entry_t - Lots more... Platforms tested: h5committested and maybe another dozen configurations.... :-)
Diffstat (limited to 'src/H5Pgcpl.c')
-rw-r--r--src/H5Pgcpl.c194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/H5Pgcpl.c b/src/H5Pgcpl.c
index 8b22015..388d453 100644
--- a/src/H5Pgcpl.c
+++ b/src/H5Pgcpl.c
@@ -30,6 +30,8 @@
*
* Purpose: Set the "size hint" for creating local heaps for a group.
*
+ * Note: XXX: Add [meaningful] tests for this routine! -QAK
+ *
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
@@ -71,6 +73,8 @@ done:
* Purpose: Returns the local heap size hint, which is used for creating
* groups
*
+ * Note: XXX: Add [meaningful] tests for this routine! -QAK
+ *
* Return: Non-negative on success/Negative on failure
*
* Programmer: Quincey Koziol
@@ -104,3 +108,193 @@ done:
FUNC_LEAVE_API(ret_value)
} /* end H5Pget_local_heap_size_hint() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5Pset_link_phase_change
+ *
+ * Purpose: Set the maximum # of links to store "compactly" and the
+ * minimum # of links to store "densely". (These should
+ * overlap).
+ *
+ * Note: Currently both of these must be updated at the same time.
+ *
+ * Note: XXX: Add [meaningful] tests for this routine! -QAK
+ *
+ * Note: Come up with better name & description! -QAK
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * August 29, 2005
+ *-------------------------------------------------------------------------
+ */
+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 */
+
+ FUNC_ENTER_API(H5Pset_link_phase_change, FAIL)
+
+ /* 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")
+
+ /* Get group info */
+ 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 */
+ ginfo.max_compact = max_compact;
+ ginfo.min_dense = min_dense;
+
+ /* Set group info */
+ 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
+ *
+ * Purpose: Returns the max. # of compact links & the min. # of dense
+ * links, which are used for storing groups
+ *
+ * Note: XXX: Add [meaningful] tests for this routine! -QAK
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * August 29, 2005
+ *-------------------------------------------------------------------------
+ */
+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 */
+
+ FUNC_ENTER_API(H5Pget_link_phase_change, FAIL)
+
+ /* Get values */
+ 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")
+
+ /* Get group info */
+ 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)
+ *max_compact = ginfo.max_compact;
+ if(min_dense)
+ *min_dense = ginfo.min_dense;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_link_phase_change() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Pset_est_link_info
+ *
+ * Purpose: Set the estimates for the number of entries and length of each
+ * entry name in a group.
+ *
+ * Note: Currently both of these must be updated at the same time.
+ *
+ * Note: EST_NUM_ENTRIES applies only when the number of entries than
+ * the MAX_COMPACT # of entries (from H5Pset_link_phase_change).
+ *
+ * Note: XXX: Add [meaningful] tests for this routine! -QAK
+ *
+ * Note: Come up with better name & description? -QAK
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * September 6, 2005
+ *-------------------------------------------------------------------------
+ */
+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 */
+
+ FUNC_ENTER_API(H5Pset_est_link_info, FAIL)
+
+ /* 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")
+
+ /* Get group info */
+ 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 */
+ ginfo.est_num_entries = est_num_entries;
+ ginfo.est_name_len = est_name_len;
+
+ /* Set group info */
+ 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
+ *
+ * Purpose: Returns the est. # of links in a group & the est. length of
+ * the name of each link.
+ *
+ * Note: XXX: Add [meaningful] tests for this routine! -QAK
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * September 6, 2005
+ *-------------------------------------------------------------------------
+ */
+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 */
+
+ FUNC_ENTER_API(H5Pget_est_link_info, FAIL)
+
+ /* Get values */
+ 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")
+
+ /* Get group info */
+ 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)
+ *est_num_entries = ginfo.est_num_entries;
+ if(est_name_len)
+ *est_name_len = ginfo.est_name_len;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_est_link_info() */
+