diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2009-10-29 13:58:52 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2009-10-29 13:58:52 (GMT) |
commit | 56276c02cdfe8d16c9663a5875803e89112700ed (patch) | |
tree | 64628715223d2a751300768f75e3ea76187845ba /src/H5B2pkg.h | |
parent | 0475c8ce57f84ced2e8ab35dabbcde6bd4e4e3fa (diff) | |
download | hdf5-56276c02cdfe8d16c9663a5875803e89112700ed.zip hdf5-56276c02cdfe8d16c9663a5875803e89112700ed.tar.gz hdf5-56276c02cdfe8d16c9663a5875803e89112700ed.tar.bz2 |
[svn-r17785] Description:
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.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h index 578e39f..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 */ @@ -235,16 +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(void); +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_free(H5B2_hdr_t *hdr); -H5_DLL herr_t H5B2_hdr_delete(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, |