[svn-r17849] Description:
Bring r17848 from trunk to 1.8 branch:
Further refactoring v2 B-trees so that they can get context to the
encode/decode client callbacks:
- Switch tests to using refactored routines
Tested on:
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x,
w/C++ & FORTRAN, w/threadsafe, in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers, w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
Mac OS X/32 10.6.1 (amazon) in debug mode
Mac OS X/32 10.6.1 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
This commit is contained in:
44
src/H5B2.c
44
src/H5B2.c
@@ -61,26 +61,6 @@
|
||||
/********************/
|
||||
/* Local Prototypes */
|
||||
/********************/
|
||||
static H5B2_t *H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr);
|
||||
static herr_t H5B2_insert_2(H5B2_t *bt2, hid_t dxpl_id, void *udata);
|
||||
static herr_t H5B2_iterate_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op,
|
||||
void *op_data);
|
||||
static htri_t H5B2_find_2(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_found_t op, void *op_data);
|
||||
static herr_t H5B2_index_2(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
hsize_t idx, H5B2_found_t op, void *op_data);
|
||||
static herr_t H5B2_remove_2(H5B2_t *b2, hid_t dxpl_id, void *udata,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
static herr_t H5B2_remove_by_idx_2(H5B2_t *bt2, hid_t dxpl_id,
|
||||
H5_iter_order_t order, hsize_t idx, H5B2_remove_t op, void *op_data);
|
||||
static herr_t H5B2_get_nrec_2(const H5B2_t *bt2, hsize_t *nrec);
|
||||
static herr_t H5B2_neighbor_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range,
|
||||
void *udata, H5B2_found_t op, void *op_data);
|
||||
static herr_t H5B2_modify_2(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_modify_t op, void *op_data);
|
||||
static herr_t H5B2_iterate_size_2(H5B2_t *bt2, hid_t dxpl_id,
|
||||
hsize_t *btree_size);
|
||||
static herr_t H5B2_close(H5B2_t *bt2, hid_t dxpl_id);
|
||||
|
||||
|
||||
/*********************/
|
||||
@@ -258,7 +238,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5B2_t *
|
||||
H5B2_t *
|
||||
H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr)
|
||||
{
|
||||
H5B2_t *bt2 = NULL; /* Pointer to the B-tree */
|
||||
@@ -322,7 +302,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_insert_2(H5B2_t *bt2, hid_t dxpl_id, void *udata)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
@@ -464,7 +444,7 @@ H5B2_get_addr(const H5B2_t *bt2, haddr_t *addr_p)
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_iterate_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op, void *op_data)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
@@ -565,7 +545,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static htri_t
|
||||
htri_t
|
||||
H5B2_find_2(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_found_t op,
|
||||
void *op_data)
|
||||
{
|
||||
@@ -756,7 +736,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_index_2(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order, hsize_t idx,
|
||||
H5B2_found_t op, void *op_data)
|
||||
{
|
||||
@@ -962,7 +942,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_remove_2(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_remove_t op,
|
||||
void *op_data)
|
||||
{
|
||||
@@ -1079,7 +1059,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_remove_by_idx_2(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
hsize_t idx, H5B2_remove_t op, void *op_data)
|
||||
{
|
||||
@@ -1205,7 +1185,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_get_nrec_2(const H5B2_t *bt2, hsize_t *nrec)
|
||||
{
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_get_nrec_2)
|
||||
@@ -1291,7 +1271,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_neighbor_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range, void *udata,
|
||||
H5B2_found_t op, void *op_data)
|
||||
{
|
||||
@@ -1406,7 +1386,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_modify_2(H5B2_t *bt2, hid_t dxpl_id, void *udata, H5B2_modify_t op,
|
||||
void *op_data)
|
||||
{
|
||||
@@ -1614,7 +1594,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_iterate_size_2(H5B2_t *bt2, hid_t dxpl_id, hsize_t *btree_size)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
@@ -1709,7 +1689,7 @@ done:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
herr_t
|
||||
H5B2_close(H5B2_t *bt2, hid_t dxpl_id)
|
||||
{
|
||||
haddr_t bt2_addr = HADDR_UNDEF; /* Address of v2 B-tree (for deletion) */
|
||||
|
||||
@@ -333,11 +333,15 @@ H5_DLL herr_t H5B2_leaf_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
#ifdef H5B2_TESTING
|
||||
H5_DLL herr_t H5B2_get_root_addr_test(H5F_t *f, hid_t dxpl_id,
|
||||
const H5B2_class_t *type, haddr_t addr, haddr_t *root_addr);
|
||||
H5_DLL herr_t H5B2_get_root_addr_test_2(H5B2_t *bt2, haddr_t *root_addr);
|
||||
H5_DLL int H5B2_get_node_depth_test(H5F_t *f, hid_t dxpl_id,
|
||||
const H5B2_class_t *type, haddr_t addr, void *udata);
|
||||
H5_DLL int H5B2_get_node_depth_test_2(H5B2_t *bt2, hid_t dxpl_id, void *udata);
|
||||
H5_DLL herr_t H5B2_get_node_info_test(H5F_t *f, hid_t dxpl_id,
|
||||
const H5B2_class_t *type, haddr_t addr, void *udata,
|
||||
H5B2_node_info_test_t *ninfo);
|
||||
H5_DLL herr_t H5B2_get_node_info_test_2(H5B2_t *bt2, hid_t dxpl_id,
|
||||
void *udata, H5B2_node_info_test_t *ninfo);
|
||||
#endif /* H5B2_TESTING */
|
||||
|
||||
#endif /* _H5B2pkg_H */
|
||||
|
||||
@@ -131,36 +131,57 @@ typedef struct H5B2_t H5B2_t;
|
||||
H5_DLL herr_t H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam,
|
||||
haddr_t *addr_p);
|
||||
H5_DLL H5B2_t *H5B2_create_2(H5F_t *f, hid_t dxpl_id, const H5B2_create_t *cparam);
|
||||
H5_DLL H5B2_t *H5B2_open(H5F_t *f, hid_t dxpl_id, haddr_t addr);
|
||||
H5_DLL herr_t H5B2_get_addr(const H5B2_t *bt2, haddr_t *addr/*out*/);
|
||||
H5_DLL herr_t H5B2_insert(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, void *udata);
|
||||
H5_DLL herr_t H5B2_insert_2(H5B2_t *bt2, hid_t dxpl_id, void *udata);
|
||||
H5_DLL herr_t H5B2_iterate(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, H5B2_operator_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_iterate_size(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, hsize_t *op_data);
|
||||
H5_DLL herr_t H5B2_iterate_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_operator_t op,
|
||||
void *op_data);
|
||||
H5_DLL htri_t H5B2_find(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, void *udata, H5B2_found_t op, void *op_data);
|
||||
H5_DLL htri_t H5B2_find_2(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_index(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, H5_iter_order_t order, hsize_t idx, H5B2_found_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2_index_2(H5B2_t *bt2, hid_t dxpl_id, H5_iter_order_t order,
|
||||
hsize_t idx, H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_neighbor(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, H5B2_compare_t comp, void *udata, H5B2_found_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2_neighbor_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_compare_t range,
|
||||
void *udata, H5B2_found_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_modify(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, void *udata, H5B2_modify_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_modify_2(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_modify_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_remove(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, void *udata, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_remove_2(H5B2_t *b2, hid_t dxpl_id, void *udata,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_remove_by_idx(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, H5_iter_order_t order, hsize_t idx, H5B2_remove_t op,
|
||||
void *op_data);
|
||||
H5_DLL herr_t H5B2_remove_by_idx_2(H5B2_t *bt2, hid_t dxpl_id,
|
||||
H5_iter_order_t order, hsize_t idx, H5B2_remove_t op, void *op_data);
|
||||
H5_DLL herr_t H5B2_get_nrec(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, hsize_t *nrec);
|
||||
H5_DLL herr_t H5B2_get_nrec_2(const H5B2_t *bt2, hsize_t *nrec);
|
||||
H5_DLL herr_t H5B2_iterate_size(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
|
||||
haddr_t addr, hsize_t *op_data);
|
||||
H5_DLL herr_t H5B2_iterate_size_2(H5B2_t *bt2, hid_t dxpl_id,
|
||||
hsize_t *btree_size);
|
||||
H5_DLL herr_t H5B2_close(H5B2_t *bt2, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5B2_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
H5B2_remove_t op, void *op_data);
|
||||
|
||||
/* Statistics routines */
|
||||
H5_DLL herr_t H5B2_stat_info(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
H5B2_stat_t *info);
|
||||
H5_DLL herr_t H5B2_stat_info_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_stat_t *info);
|
||||
|
||||
#endif /* _H5B2private_H */
|
||||
|
||||
|
||||
@@ -69,6 +69,43 @@
|
||||
/* Local Variables */
|
||||
/*******************/
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_stat_info_2
|
||||
*
|
||||
* Purpose: Retrieve metadata statistics for a v2 B-tree
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Monday, March 6, 2006
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_stat_info_2(H5B2_t *bt2, hid_t dxpl_id, H5B2_stat_t *info)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_stat_info_2)
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(info);
|
||||
|
||||
/* Set the shared v2 B-tree header's file context for this operation */
|
||||
bt2->hdr->f = bt2->f;
|
||||
|
||||
/* Get the v2 B-tree header */
|
||||
hdr = bt2->hdr;
|
||||
|
||||
/* Get information about the B-tree */
|
||||
info->depth = hdr->depth;
|
||||
info->nrecords = hdr->root.all_nrec;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* H5B2_stat_info_2() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_stat_info
|
||||
|
||||
184
src/H5B2test.c
184
src/H5B2test.c
@@ -220,6 +220,35 @@ H5B2_test_debug(FILE *stream, const H5F_t UNUSED *f, hid_t UNUSED dxpl_id,
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* H5B2_test_debug() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_root_addr_test_2
|
||||
*
|
||||
* Purpose: Retrieve the root node's address
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Saturday, February 26, 2005
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_get_root_addr_test_2(H5B2_t *bt2, haddr_t *root_addr)
|
||||
{
|
||||
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_get_root_addr_test_2)
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(bt2);
|
||||
HDassert(root_addr);
|
||||
|
||||
/* Get B-tree root addr */
|
||||
*root_addr = bt2->hdr->root.addr;
|
||||
|
||||
FUNC_LEAVE_NOAPI(SUCCEED)
|
||||
} /* H5B2_get_root_addr_test_2() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_root_addr_test
|
||||
@@ -265,6 +294,122 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_get_root_addr_test() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_node_info_test_2
|
||||
*
|
||||
* Purpose: Determine information about a node holding a record in the B-tree
|
||||
*
|
||||
* Return: Success: non-negative
|
||||
* Failure: negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Thursday, August 31, 2006
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5B2_get_node_info_test_2(H5B2_t *bt2, hid_t dxpl_id, void *udata,
|
||||
H5B2_node_info_test_t *ninfo)
|
||||
{
|
||||
H5B2_hdr_t *hdr; /* Pointer to the B-tree header */
|
||||
H5B2_node_ptr_t curr_node_ptr; /* Node pointer info for current node */
|
||||
unsigned depth; /* Current depth of the tree */
|
||||
int cmp; /* Comparison value of records */
|
||||
unsigned idx; /* Location of record which matches key */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5B2_get_node_info_test_2, FAIL)
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(bt2);
|
||||
|
||||
/* Set the shared v2 B-tree header's file context for this operation */
|
||||
bt2->hdr->f = bt2->f;
|
||||
|
||||
/* Get the v2 B-tree header */
|
||||
hdr = bt2->hdr;
|
||||
|
||||
/* Make copy of the root node pointer to start search with */
|
||||
curr_node_ptr = hdr->root;
|
||||
|
||||
/* Current depth of the tree */
|
||||
depth = hdr->depth;
|
||||
|
||||
/* Check for empty tree */
|
||||
if(0 == curr_node_ptr.node_nrec)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "B-tree has no records")
|
||||
|
||||
/* Walk down B-tree to find record or leaf node where record is located */
|
||||
cmp = -1;
|
||||
while(depth > 0 && cmp != 0) {
|
||||
H5B2_internal_t *internal; /* Pointer to internal node in B-tree */
|
||||
H5B2_node_ptr_t next_node_ptr; /* Node pointer info for next node */
|
||||
|
||||
/* Lock B-tree current node */
|
||||
if(NULL == (internal = H5B2_protect_internal(hdr, dxpl_id, curr_node_ptr.addr, curr_node_ptr.node_nrec, depth, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Locate node pointer for child */
|
||||
cmp = H5B2_locate_record(hdr->cls, internal->nrec, hdr->nat_off, internal->int_native, udata, &idx);
|
||||
if(cmp > 0)
|
||||
idx++;
|
||||
|
||||
if(cmp != 0) {
|
||||
/* Get node pointer for next node to search */
|
||||
next_node_ptr = internal->node_ptrs[idx];
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Set pointer to next node to load */
|
||||
curr_node_ptr = next_node_ptr;
|
||||
} /* end if */
|
||||
else {
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_INT, curr_node_ptr.addr, internal, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Fill in information about the node */
|
||||
ninfo->depth = depth;
|
||||
ninfo->nrec = curr_node_ptr.node_nrec;
|
||||
|
||||
/* Indicate success */
|
||||
HGOTO_DONE(SUCCEED)
|
||||
} /* end else */
|
||||
|
||||
/* Decrement depth we're at in B-tree */
|
||||
depth--;
|
||||
} /* end while */
|
||||
|
||||
{
|
||||
H5B2_leaf_t *leaf; /* Pointer to leaf node in B-tree */
|
||||
|
||||
/* Lock B-tree leaf node */
|
||||
if(NULL == (leaf = (H5B2_leaf_t *)H5AC_protect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, &(curr_node_ptr.node_nrec), hdr, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
|
||||
|
||||
/* Locate record */
|
||||
cmp = H5B2_locate_record(hdr->cls, leaf->nrec, hdr->nat_off, leaf->leaf_native, udata, &idx);
|
||||
|
||||
/* Unlock current node */
|
||||
if(H5AC_unprotect(hdr->f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, leaf, H5AC__NO_FLAGS_SET) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTUNPROTECT, FAIL, "unable to release B-tree node")
|
||||
|
||||
/* Indicate the depth that the record was found */
|
||||
if(cmp != 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "record not in B-tree")
|
||||
} /* end block */
|
||||
|
||||
/* Fill in information about the leaf node */
|
||||
ninfo->depth = depth;
|
||||
ninfo->nrec = curr_node_ptr.node_nrec;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_get_node_info_test_2() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_node_info_test
|
||||
@@ -388,6 +533,45 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_get_node_info_test() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_node_depth_test_2
|
||||
*
|
||||
* Purpose: Determine the depth of a node holding a record in the B-tree
|
||||
*
|
||||
* Note: Just a simple wrapper around the H5B2_get_node_info_test() routine
|
||||
*
|
||||
* Return: Success: non-negative depth of the node where the record
|
||||
* was found
|
||||
* Failure: negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* Saturday, August 26, 2006
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
H5B2_get_node_depth_test_2(H5B2_t *bt2, hid_t dxpl_id, void *udata)
|
||||
{
|
||||
H5B2_node_info_test_t ninfo; /* Node information */
|
||||
int ret_value; /* Return information */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5B2_get_node_depth_test_2, FAIL)
|
||||
|
||||
/* Check arguments. */
|
||||
HDassert(bt2);
|
||||
|
||||
/* Get information abou the node */
|
||||
if(H5B2_get_node_info_test_2(bt2, dxpl_id, udata, &ninfo) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "error looking up node info")
|
||||
|
||||
/* Set return value */
|
||||
ret_value = (int)ninfo.depth;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5B2_get_node_depth_test_2() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5B2_get_node_depth_test
|
||||
|
||||
4652
test/btree2.c
4652
test/btree2.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user