summaryrefslogtreecommitdiffstats
path: root/src/H5B2test.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2005-02-26 13:05:41 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2005-02-26 13:05:41 (GMT)
commit11a9d301774c2dc28e971eb726bcf931f15a759c (patch)
treebf9a8c2370adae146cb1a3e52a986117be39b584 /src/H5B2test.c
parent10df21a4017503cd6654c22ef97c24b6764d4641 (diff)
downloadhdf5-11a9d301774c2dc28e971eb726bcf931f15a759c.zip
hdf5-11a9d301774c2dc28e971eb726bcf931f15a759c.tar.gz
hdf5-11a9d301774c2dc28e971eb726bcf931f15a759c.tar.bz2
[svn-r10094] Purpose:
New features & refactor Description: Add basic record removal (only handles level-0 B-trees currently) Add query routine to check the number of records in a B-tree Add debugging routine to check the address of the root node in the B-tree Platforms tested: FreeBSD 4.11 (sleipnir) Solaris 2.9 (shanti)
Diffstat (limited to 'src/H5B2test.c')
-rw-r--r--src/H5B2test.c81
1 files changed, 79 insertions, 2 deletions
diff --git a/src/H5B2test.c b/src/H5B2test.c
index ac45377..6180683 100644
--- a/src/H5B2test.c
+++ b/src/H5B2test.c
@@ -24,9 +24,11 @@
/* Private headers */
#include "H5private.h" /* Generic Functions */
#include "H5B2pkg.h" /* B-trees */
+#include "H5Eprivate.h" /* Error handling */
/* Static Prototypes */
-static herr_t H5B2_test_store(const void *udata, void *nrecord);
+static herr_t H5B2_test_store(void *nrecord, const void *udata);
+static herr_t H5B2_test_retrieve(void *udata, const void *nrecord);
static herr_t H5B2_test_compare(const void *rec1, const void *rec2);
static herr_t H5B2_test_encode(const H5F_t *f, uint8_t *raw,
const void *nrecord);
@@ -40,6 +42,7 @@ const H5B2_class_t H5B2_TEST[1]={{ /* B-tree class information */
H5B2_TEST_ID, /* Type of B-tree */
sizeof(hsize_t), /* Size of native key */
H5B2_test_store, /* Record storage callback */
+ H5B2_test_retrieve, /* Record retrieval callback */
H5B2_test_compare, /* Record comparison callback */
H5B2_test_encode, /* Record encoding callback */
H5B2_test_decode, /* Record decoding callback */
@@ -64,7 +67,7 @@ const H5B2_class_t H5B2_TEST[1]={{ /* B-tree class information */
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_test_store(const void *udata, void *nrecord)
+H5B2_test_store(void *nrecord, const void *udata)
{
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_test_store)
@@ -75,6 +78,33 @@ H5B2_test_store(const void *udata, void *nrecord)
/*-------------------------------------------------------------------------
+ * Function: H5B2_test_retrieve
+ *
+ * Purpose: Retrieve native information from record for B-tree
+ *
+ * Return: Success: non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Quincey Koziol
+ * Friday, February 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_test_retrieve(void *udata, const void *nrecord)
+{
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_test_retrieve)
+
+ *(hsize_t *)udata=*(const hsize_t *)nrecord;
+
+ FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5B2_test_retrieve() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5B2_test_compare
*
* Purpose: Compare two native information records, according to some key
@@ -183,3 +213,50 @@ H5B2_test_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id, int i
FUNC_LEAVE_NOAPI(SUCCEED);
} /* H5B2_test_debug() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_get_root_addr
+ *
+ * Purpose: Retrieve the root node's address
+ *
+ * Return: Success: non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Quincey Koziol
+ * Saturday, February 26, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_get_root_addr(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+ haddr_t addr, haddr_t *root_addr)
+{
+ H5B2_t *bt2=NULL; /* Pointer to the B-tree header */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT(H5B2_get_root_addr)
+
+ /* Check arguments. */
+ HDassert(f);
+ HDassert(type);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(root_addr);
+
+ /* Look up the B-tree header */
+ if (NULL == (bt2 = H5AC_protect(f, dxpl_id, H5AC_BT2_HDR, addr, type, NULL, H5AC_WRITE)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree header")
+
+ /* Get B-tree root addr */
+ *root_addr = bt2->root.addr;
+
+done:
+ /* Release B-tree header node */
+ if (bt2 && H5AC_unprotect(f, dxpl_id, H5AC_BT2_HDR, addr, bt2, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree header info")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_get_root_addr() */
+