summaryrefslogtreecommitdiffstats
path: root/src/H5B2pkg.h
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-10-29 14:54:08 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-10-29 14:54:08 (GMT)
commitac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a (patch)
tree54c6ad6ea49eb560abfa7cdd3e105426b184bf4b /src/H5B2pkg.h
parent7abd8c4d3003d56f6564a79dd0eaa4d97604a769 (diff)
downloadhdf5-ac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a.zip
hdf5-ac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a.tar.gz
hdf5-ac0778592ae832ccd2b3ec4a6ed62d5340d8ea2a.tar.bz2
[svn-r17786] Description:
Bring r17749 & 17785 from trunk to 1.8 branch: 17749: Refactor v2 B-tree code to bring it further in line with how the fractal heap code works, to make forthcoming modificaions easier. Also minor tweaks to the fractal heap code to clean it up a bit more also. 17785: Further refactor v2 B-tree code to bring it closer to modern data structure designed in the library, mainly by introducing a H5B2_t type so that the v2 B-tree could be held open, but not require the B-tree header to be protected the whole time. A few other minor tweaks as well. Also, remove unused 'dirty' flag from fractal heap header. 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
Diffstat (limited to 'src/H5B2pkg.h')
-rw-r--r--src/H5B2pkg.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h
index b47cc32..3961fb5 100644
--- a/src/H5B2pkg.h
+++ b/src/H5B2pkg.h
@@ -158,7 +158,10 @@ typedef struct H5B2_hdr_t {
H5F_t *f; /* Pointer to the file that the B-tree is in */
haddr_t addr; /* Address of B-tree header in the file */
size_t rc; /* Reference count of nodes using this header */
+ size_t file_rc; /* Reference count of files using this header */
hbool_t pending_delete; /* B-tree is pending deletion */
+ H5B2_remove_t remove_op; /* Callback operator for deleting B-tree */
+ void *remove_op_data;/* B-tree deletion callback's context */
const H5B2_class_t *cls; /* Class of B-tree client */
uint8_t *page; /* Common disk page for I/O */
size_t *nat_off; /* Array of offsets of native records */
@@ -189,6 +192,12 @@ typedef struct H5B2_internal_t {
unsigned depth; /* Depth of this node in the B-tree */
} H5B2_internal_t;
+/* v2 B-tree */
+struct H5B2_t {
+ H5B2_hdr_t *hdr; /* Pointer to internal v2 B-tree header info */
+ H5F_t *f; /* Pointer to file for v2 B-tree */
+};
+
/* User data for metadata cache 'load' callback */
typedef struct {
H5B2_hdr_t *hdr; /* Pointer to the [pinned] v2 B-tree header */
@@ -218,9 +227,6 @@ H5_DLLVAR const H5AC_class_t H5AC_BT2_INT[1];
/* H5B2 leaf node inherits cache-like properties from H5AC */
H5_DLLVAR const H5AC_class_t H5AC_BT2_LEAF[1];
-/* Declare a free list to manage the H5B2_hdr_t struct */
-H5FL_EXTERN(H5B2_hdr_t);
-
/* Declare a free list to manage the H5B2_internal_t struct */
H5FL_EXTERN(H5B2_internal_t);
@@ -238,13 +244,18 @@ H5_DLLVAR const H5B2_class_t H5B2_TEST[1];
/******************************/
/* Routines for managing B-tree header info */
+H5_DLL H5B2_hdr_t *H5B2_hdr_alloc(H5F_t *f);
+H5_DLL haddr_t H5B2_hdr_create(H5F_t *f, hid_t dxpl_id,
+ const H5B2_create_t *cparam);
+H5_DLL herr_t H5B2_hdr_init(H5F_t *f, H5B2_hdr_t *hdr,
+ const H5B2_create_t *cparam, unsigned depth);
H5_DLL herr_t H5B2_hdr_incr(H5B2_hdr_t *hdr);
H5_DLL herr_t H5B2_hdr_decr(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_hdr_fuse_incr(H5B2_hdr_t *hdr);
+H5_DLL size_t H5B2_hdr_fuse_decr(H5B2_hdr_t *hdr);
H5_DLL herr_t H5B2_hdr_dirty(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_hdr_delete(H5B2_hdr_t *hdr);
-H5_DLL herr_t H5B2_hdr_init(H5F_t *f, H5B2_hdr_t *hdr,
- const H5B2_create_t *cparam, unsigned depth);
H5_DLL herr_t H5B2_hdr_free(H5B2_hdr_t *hdr);
+H5_DLL herr_t H5B2_hdr_delete(H5B2_hdr_t *hdr, hid_t dxpl_id);
/* Routines for operating on internal nodes */
H5_DLL H5B2_internal_t *H5B2_protect_internal(H5F_t *f, hid_t dxpl_id,