summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MANIFEST6
-rw-r--r--Makefile.in2
-rw-r--r--c++/Makefile.in2
-rw-r--r--c++/examples/Makefile.in2
-rw-r--r--c++/src/Makefile.in2
-rw-r--r--c++/test/Makefile.in2
-rw-r--r--doc/Makefile.in2
-rw-r--r--doc/html/ADGuide/Makefile.in2
-rw-r--r--doc/html/Graphics/Makefile.in2
-rw-r--r--doc/html/Intro/Makefile.in2
-rw-r--r--doc/html/Makefile.in2
-rw-r--r--doc/html/PSandPDF/Makefile.in2
-rw-r--r--doc/html/TechNotes/Makefile.in2
-rw-r--r--doc/html/Tutor/Graphics/Makefile.in2
-rw-r--r--doc/html/Tutor/Makefile.in2
-rw-r--r--doc/html/Tutor/examples/Makefile.in2
-rw-r--r--doc/html/cpplus/Makefile.in2
-rw-r--r--doc/html/ed_libs/Makefile.in2
-rw-r--r--doc/html/ed_styles/Makefile.in2
-rw-r--r--doc/html/fortran/Makefile.in2
-rw-r--r--examples/Makefile.in2
-rw-r--r--fortran/Makefile.in2
-rw-r--r--fortran/examples/Makefile.in2
-rw-r--r--fortran/src/Makefile.in2
-rw-r--r--fortran/test/Makefile.in2
-rw-r--r--fortran/testpar/Makefile.in2
-rwxr-xr-xhl/Makefile.in2
-rw-r--r--hl/fortran/Makefile.in2
-rw-r--r--hl/fortran/src/Makefile.in2
-rw-r--r--hl/fortran/test/Makefile.in2
-rw-r--r--hl/src/Makefile.in2
-rw-r--r--hl/test/Makefile.in2
-rw-r--r--hl/tools/gif2h5/Makefile.in2
-rw-r--r--perform/Makefile.in2
-rw-r--r--src/H5ACprivate.h4
-rw-r--r--src/H5B2.c1176
-rw-r--r--src/H5B2dbg.c138
-rw-r--r--src/H5B2pkg.h118
-rw-r--r--src/H5B2private.h91
-rw-r--r--src/H5B2public.h52
-rw-r--r--src/H5FL.c188
-rw-r--r--src/H5FLprivate.h35
-rwxr-xr-xsrc/Makefile.am10
-rw-r--r--src/Makefile.in57
-rw-r--r--test/Makefile.am7
-rw-r--r--test/Makefile.in84
-rw-r--r--test/btree2.c271
-rw-r--r--testpar/Makefile.in2
-rw-r--r--tools/Makefile.in2
-rw-r--r--tools/gifconv/Makefile.in2
-rw-r--r--tools/h5diff/Makefile.in2
-rw-r--r--tools/h5dump/Makefile.in2
-rwxr-xr-xtools/h5import/Makefile.in2
-rw-r--r--tools/h5jam/Makefile.in2
-rw-r--r--tools/h5ls/Makefile.in2
-rw-r--r--tools/h5repack/Makefile.in2
-rw-r--r--tools/lib/Makefile.in2
-rw-r--r--tools/misc/Makefile.in2
-rw-r--r--tools/misc/h5debug.c36
59 files changed, 2247 insertions, 114 deletions
diff --git a/MANIFEST b/MANIFEST
index fad4766..b6ff494 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -774,6 +774,11 @@
./src/H5Bpkg.h
./src/H5Bprivate.h
./src/H5Bpublic.h
+./src/H5B2.c
+./src/H5B2dbg.c
+./src/H5B2pkg.h
+./src/H5B2private.h
+./src/H5B2public.h
./src/H5C.c
./src/H5Cpkg.h
./src/H5Cprivate.h
@@ -969,6 +974,7 @@
./test/Makefile.in
./test/big.c
./test/bittests.c
+./test/btree2.c
./test/cache.c
./test/cmpd_dset.c
./test/createnoenc.c
diff --git a/Makefile.in b/Makefile.in
index 9efee11..592c18f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -242,7 +242,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign Makefile
+ $(AUTOMAKE) --gnu Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
diff --git a/c++/Makefile.in b/c++/Makefile.in
index 43cac76..d65d69e 100644
--- a/c++/Makefile.in
+++ b/c++/Makefile.in
@@ -231,7 +231,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign c++/Makefile
+ $(AUTOMAKE) --gnu c++/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index 638cec6..fd7c650 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -249,7 +249,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign c++/examples/Makefile
+ $(AUTOMAKE) --gnu c++/examples/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index ecb530d..af4ea86 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -315,7 +315,7 @@ all: all-am
.SUFFIXES: .cpp .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign c++/src/Makefile
+ $(AUTOMAKE) --gnu c++/src/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
h5c++: $(top_builddir)/config.status h5c++.in
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in
index 13ffb33..9863440 100644
--- a/c++/test/Makefile.in
+++ b/c++/test/Makefile.in
@@ -275,7 +275,7 @@ all: all-am
.SUFFIXES: .cpp .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign c++/test/Makefile
+ $(AUTOMAKE) --gnu c++/test/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 5bee7b4..17bbce4 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -211,7 +211,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/Makefile
+ $(AUTOMAKE) --gnu doc/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/ADGuide/Makefile.in b/doc/html/ADGuide/Makefile.in
index a2d4767..057c621 100644
--- a/doc/html/ADGuide/Makefile.in
+++ b/doc/html/ADGuide/Makefile.in
@@ -205,7 +205,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/ADGuide/Makefile
+ $(AUTOMAKE) --gnu doc/html/ADGuide/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/Graphics/Makefile.in b/doc/html/Graphics/Makefile.in
index 2eb3d1a..fdd3087 100644
--- a/doc/html/Graphics/Makefile.in
+++ b/doc/html/Graphics/Makefile.in
@@ -203,7 +203,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/Graphics/Makefile
+ $(AUTOMAKE) --gnu doc/html/Graphics/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/Intro/Makefile.in b/doc/html/Intro/Makefile.in
index 630ee27..7c60248 100644
--- a/doc/html/Intro/Makefile.in
+++ b/doc/html/Intro/Makefile.in
@@ -203,7 +203,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/Intro/Makefile
+ $(AUTOMAKE) --gnu doc/html/Intro/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/Makefile.in b/doc/html/Makefile.in
index b0e0dbd..ab07a97 100644
--- a/doc/html/Makefile.in
+++ b/doc/html/Makefile.in
@@ -237,7 +237,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/Makefile
+ $(AUTOMAKE) --gnu doc/html/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/PSandPDF/Makefile.in b/doc/html/PSandPDF/Makefile.in
index c5c2529..4c766ce 100644
--- a/doc/html/PSandPDF/Makefile.in
+++ b/doc/html/PSandPDF/Makefile.in
@@ -198,7 +198,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/PSandPDF/Makefile
+ $(AUTOMAKE) --gnu doc/html/PSandPDF/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/TechNotes/Makefile.in b/doc/html/TechNotes/Makefile.in
index a2afa89..be8c15b 100644
--- a/doc/html/TechNotes/Makefile.in
+++ b/doc/html/TechNotes/Makefile.in
@@ -212,7 +212,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/TechNotes/Makefile
+ $(AUTOMAKE) --gnu doc/html/TechNotes/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/Tutor/Graphics/Makefile.in b/doc/html/Tutor/Graphics/Makefile.in
index 0f46cc0..f52472d 100644
--- a/doc/html/Tutor/Graphics/Makefile.in
+++ b/doc/html/Tutor/Graphics/Makefile.in
@@ -211,7 +211,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/Tutor/Graphics/Makefile
+ $(AUTOMAKE) --gnu doc/html/Tutor/Graphics/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/Tutor/Makefile.in b/doc/html/Tutor/Makefile.in
index a5c01e5..cd0b0d2 100644
--- a/doc/html/Tutor/Makefile.in
+++ b/doc/html/Tutor/Makefile.in
@@ -218,7 +218,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/Tutor/Makefile
+ $(AUTOMAKE) --gnu doc/html/Tutor/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/Tutor/examples/Makefile.in b/doc/html/Tutor/examples/Makefile.in
index 20adbd3..a2e9047 100644
--- a/doc/html/Tutor/examples/Makefile.in
+++ b/doc/html/Tutor/examples/Makefile.in
@@ -226,7 +226,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/Tutor/examples/Makefile
+ $(AUTOMAKE) --gnu doc/html/Tutor/examples/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/cpplus/Makefile.in b/doc/html/cpplus/Makefile.in
index 7019895..59dae59 100644
--- a/doc/html/cpplus/Makefile.in
+++ b/doc/html/cpplus/Makefile.in
@@ -203,7 +203,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/cpplus/Makefile
+ $(AUTOMAKE) --gnu doc/html/cpplus/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/ed_libs/Makefile.in b/doc/html/ed_libs/Makefile.in
index 38112b8..e479405 100644
--- a/doc/html/ed_libs/Makefile.in
+++ b/doc/html/ed_libs/Makefile.in
@@ -207,7 +207,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/ed_libs/Makefile
+ $(AUTOMAKE) --gnu doc/html/ed_libs/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/ed_styles/Makefile.in b/doc/html/ed_styles/Makefile.in
index d77c889..4ae7ab6 100644
--- a/doc/html/ed_styles/Makefile.in
+++ b/doc/html/ed_styles/Makefile.in
@@ -206,7 +206,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/ed_styles/Makefile
+ $(AUTOMAKE) --gnu doc/html/ed_styles/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/doc/html/fortran/Makefile.in b/doc/html/fortran/Makefile.in
index 6593306..0582bd8 100644
--- a/doc/html/fortran/Makefile.in
+++ b/doc/html/fortran/Makefile.in
@@ -203,7 +203,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence-doc.am $(top_srcdir)/config/commence.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign doc/html/fortran/Makefile
+ $(AUTOMAKE) --gnu doc/html/fortran/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 220c0da..72a55fb 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -257,7 +257,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign examples/Makefile
+ $(AUTOMAKE) --gnu examples/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/fortran/Makefile.in b/fortran/Makefile.in
index 688ffab..c6f5c394 100644
--- a/fortran/Makefile.in
+++ b/fortran/Makefile.in
@@ -239,7 +239,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign fortran/Makefile
+ $(AUTOMAKE) --gnu fortran/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index 62ad52c..c639821 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -250,7 +250,7 @@ all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign fortran/examples/Makefile
+ $(AUTOMAKE) --gnu fortran/examples/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in
index 05b5287..f3fac18 100644
--- a/fortran/src/Makefile.in
+++ b/fortran/src/Makefile.in
@@ -307,7 +307,7 @@ all: all-am
.SUFFIXES: .c .f90 .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign fortran/src/Makefile
+ $(AUTOMAKE) --gnu fortran/src/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
h5fc: $(top_builddir)/config.status h5fc.in
diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in
index 31760df..be7d370 100644
--- a/fortran/test/Makefile.in
+++ b/fortran/test/Makefile.in
@@ -331,7 +331,7 @@ all: all-am
.SUFFIXES: .c .f90 .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign fortran/test/Makefile
+ $(AUTOMAKE) --gnu fortran/test/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
libLTLIBRARIES_INSTALL = $(INSTALL)
diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in
index 4949c66..57cd9a1 100644
--- a/fortran/testpar/Makefile.in
+++ b/fortran/testpar/Makefile.in
@@ -264,7 +264,7 @@ all: all-am
.SUFFIXES: .f90 .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign fortran/testpar/Makefile
+ $(AUTOMAKE) --gnu fortran/testpar/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/hl/Makefile.in b/hl/Makefile.in
index b616f06..e217641 100755
--- a/hl/Makefile.in
+++ b/hl/Makefile.in
@@ -228,7 +228,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign hl/Makefile
+ $(AUTOMAKE) --gnu hl/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in
index 1eb3761..8b8112a 100644
--- a/hl/fortran/Makefile.in
+++ b/hl/fortran/Makefile.in
@@ -226,7 +226,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign hl/fortran/Makefile
+ $(AUTOMAKE) --gnu hl/fortran/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in
index 9824a38..a6fddf0 100644
--- a/hl/fortran/src/Makefile.in
+++ b/hl/fortran/src/Makefile.in
@@ -261,7 +261,7 @@ all: all-am
.SUFFIXES: .c .f90 .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign hl/fortran/src/Makefile
+ $(AUTOMAKE) --gnu hl/fortran/src/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
libLTLIBRARIES_INSTALL = $(INSTALL)
diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in
index a0cd2b4..1e2bca3 100644
--- a/hl/fortran/test/Makefile.in
+++ b/hl/fortran/test/Makefile.in
@@ -267,7 +267,7 @@ all: all-am
.SUFFIXES: .f90 .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign hl/fortran/test/Makefile
+ $(AUTOMAKE) --gnu hl/fortran/test/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in
index 62059a8..c635d2d 100644
--- a/hl/src/Makefile.in
+++ b/hl/src/Makefile.in
@@ -253,7 +253,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign hl/src/Makefile
+ $(AUTOMAKE) --gnu hl/src/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
libLTLIBRARIES_INSTALL = $(INSTALL)
diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in
index c12e43e..9b12fc0 100644
--- a/hl/test/Makefile.in
+++ b/hl/test/Makefile.in
@@ -272,7 +272,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign hl/test/Makefile
+ $(AUTOMAKE) --gnu hl/test/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in
index 884b7ba..0d58f52 100644
--- a/hl/tools/gif2h5/Makefile.in
+++ b/hl/tools/gif2h5/Makefile.in
@@ -274,7 +274,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/gifconv/Makefile
+ $(AUTOMAKE) --gnu tools/gifconv/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
diff --git a/perform/Makefile.in b/perform/Makefile.in
index ae13d7d..2d637f1 100644
--- a/perform/Makefile.in
+++ b/perform/Makefile.in
@@ -316,7 +316,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign perform/Makefile
+ $(AUTOMAKE) --gnu perform/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index b26bd1e..51f5b5a 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -44,7 +44,9 @@
#define H5AC_LHEAP_ID 2 /*local heap */
#define H5AC_GHEAP_ID 3 /*global heap */
#define H5AC_OHDR_ID 4 /*object header */
-#define H5AC_NTYPES 5
+#define H5AC_BT2_HDR_ID 5 /*v2 B-tree header */
+#define H5AC_BT2_LEAF_ID 6 /*v2 B-tree leaf */
+#define H5AC_NTYPES 7
/* H5AC_DUMP_STATS_ON_CLOSE should always be FALSE when
* H5C_COLLECT_CACHE_STATS is FALSE.
diff --git a/src/H5B2.c b/src/H5B2.c
new file mode 100644
index 0000000..1307c07
--- /dev/null
+++ b/src/H5B2.c
@@ -0,0 +1,1176 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created: H5B2.c
+ * Jan 31 2005
+ * Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose: Implements a B-tree, with several modifications from
+ * the "standard" methods.
+ *
+ * Please see the documentation in:
+ * doc/html/TechNotes/Btrees.html for a full description
+ * of how they work, etc.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5B2_PACKAGE /*suppress error about including H5B2pkg */
+
+/* Private headers */
+#include "H5private.h" /* Generic Functions */
+#include "H5B2pkg.h" /* B-trees */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5MFprivate.h" /* File memory management */
+
+/* Local macros */
+
+/* B-tree version #'s */
+#define H5B2_HDR_VERSION 0 /* Header */
+#define H5B2_LEAF_VERSION 0 /* Leaf node */
+
+/* Size of storage for number of records per node (on disk) */
+#define H5B2_SIZEOF_RECORDS_PER_NODE 2
+
+/* Size of a "node pointer" (on disk) */
+#define H5B2_NODE_POINTER_SIZE(f) (H5F_SIZEOF_ADDR(f)+H5B2_SIZEOF_RECORDS_PER_NODE+H5F_SIZEOF_SIZE(f))
+
+/* Format overhead for each node (on disk) */
+#define H5B2_OVERHEAD_SIZE (H5B2_SIZEOF_MAGIC+1) /* Signature + version # */
+
+/* Number of records that fit into internal node */
+#define H5B2_NUM_INT_REC(f,n,r) (((n)-(H5B2_OVERHEAD_SIZE+H5B2_NODE_POINTER_SIZE(f)))/((r)+H5B2_NODE_POINTER_SIZE(f)))
+
+/* Number of records that fit into leaf node */
+#define H5B2_NUM_LEAF_REC(n,r) (((n)-H5B2_OVERHEAD_SIZE)/(r))
+
+/* Size of the B-tree header on disk */
+#define H5B2_HEADER_SIZE(f) ( \
+ 4 + /* Signature */ \
+ 1 + /* Version */ \
+ 1 + /* Tree type */ \
+ 4 + /* Node size, in bytes */ \
+ 2 + /* Key size, in bytes */ \
+ 2 + /* Depth of tree */ \
+ 2 + /* Split % of full (as integer, ie. "98" means 98%) */ \
+ 2 + /* Merge % of full (as integer, ie. "98" means 98%) */ \
+ H5B2_NODE_POINTER_SIZE(f)) /* Node pointer to root node in tree */
+
+/* Macro to retrieve pointer to i'th native key for leaf node */
+#define H5B2_INT_NKEY(i,shared,idx) ((i)->int_native+(shared)->int_nat_off[(idx)])
+#define H5B2_LEAF_NKEY(l,shared,idx) ((l)->leaf_native+(shared)->leaf_nat_off[(idx)])
+
+
+/* Local typedefs */
+
+/* Local prototypes */
+
+/* Helper functions */
+static herr_t H5B2_shared_free (void *_shared);
+static herr_t H5B2_shared_init (H5F_t *f, H5B2_t *bt2, const H5B2_class_t *type,
+ size_t node_size, size_t rkey_size, unsigned split_percent, unsigned merge_percent);
+static herr_t H5B2_create_leaf(H5F_t *f, hid_t dxpl_id, H5B2_t *bt2, H5B2_node_ptr_t *node_ptr);
+static int H5B2_locate_record(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+ unsigned nrec, size_t *rec_off, const uint8_t *native,
+ const void *udata);
+
+/* Metadata cache callbacks */
+static H5B2_t *H5B2_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata);
+static herr_t H5B2_cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B2_t *b);
+static herr_t H5B2_cache_hdr_dest(H5F_t *f, H5B2_t *b);
+static herr_t H5B2_cache_hdr_clear(H5F_t *f, H5B2_t *b, hbool_t destroy);
+static herr_t H5B2_cache_hdr_size(const H5F_t *f, const H5B2_t *bt, size_t *size_ptr);
+static H5B2_leaf_t *H5B2_cache_leaf_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata);
+static herr_t H5B2_cache_leaf_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B2_leaf_t *l);
+static herr_t H5B2_cache_leaf_dest(H5F_t *f, H5B2_leaf_t *l);
+static herr_t H5B2_cache_leaf_clear(H5F_t *f, H5B2_leaf_t *l, hbool_t destroy);
+static herr_t H5B2_cache_leaf_size(const H5F_t *f, const H5B2_leaf_t *l, size_t *size_ptr);
+
+/* Static variables */
+
+/* H5B2 inherits cache-like properties from H5AC */
+const H5AC_class_t H5AC_BT2_HDR[1] = {{
+ H5AC_BT2_HDR_ID,
+ (H5AC_load_func_t)H5B2_cache_hdr_load,
+ (H5AC_flush_func_t)H5B2_cache_hdr_flush,
+ (H5AC_dest_func_t)H5B2_cache_hdr_dest,
+ (H5AC_clear_func_t)H5B2_cache_hdr_clear,
+ (H5AC_size_func_t)H5B2_cache_hdr_size,
+}};
+
+/* H5B2 inherits cache-like properties from H5AC */
+static const H5AC_class_t H5AC_BT2_LEAF[1] = {{
+ H5AC_BT2_LEAF_ID,
+ (H5AC_load_func_t)H5B2_cache_leaf_load,
+ (H5AC_flush_func_t)H5B2_cache_leaf_flush,
+ (H5AC_dest_func_t)H5B2_cache_leaf_dest,
+ (H5AC_clear_func_t)H5B2_cache_leaf_clear,
+ (H5AC_size_func_t)H5B2_cache_leaf_size,
+}};
+
+
+/* Declare a free list to manage B-tree header data to/from disk */
+H5FL_BLK_DEFINE_STATIC(header_block);
+
+/* Declare a free list to manage B-tree node pages to/from disk */
+H5FL_BLK_DEFINE_STATIC(node_page);
+
+/* Declare a free list to manage the 'H5B2_node_ptr_t' sequence information */
+H5FL_SEQ_DEFINE_STATIC(H5B2_node_ptr_t);
+
+/* Declare a free list to manage the 'size_t' sequence information */
+H5FL_SEQ_DEFINE_STATIC(size_t);
+
+/* Declare a free list to manage the H5B2_t struct */
+H5FL_DEFINE_STATIC(H5B2_t);
+
+/* Declare a free list to manage the H5B2_shared_t struct */
+H5FL_DEFINE_STATIC(H5B2_shared_t);
+
+/* Declare a free list to manage the H5B2_leaf_t struct */
+H5FL_DEFINE_STATIC(H5B2_leaf_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_shared_init
+ *
+ * Purpose: Allocate & initialize shared B-tree info
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_shared_init (H5F_t *f, H5B2_t *bt2, const H5B2_class_t *type,
+ size_t node_size, size_t rkey_size,
+ unsigned split_percent, unsigned merge_percent)
+{
+ H5B2_shared_t *shared = NULL; /* Shared B-tree information */
+ unsigned u; /* Local index variable */
+ herr_t ret_value=SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5B2_shared_init)
+
+ /* Allocate space for the shared information */
+ if(NULL==(shared = H5FL_CALLOC(H5B2_shared_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree shared information")
+
+ /* Assign user's information */
+ shared->split_percent = split_percent;
+ shared->merge_percent = merge_percent;
+ shared->node_size = node_size;
+ shared->rkey_size = rkey_size;
+
+ /* Compute derived information */
+ shared->internal_nrec = H5B2_NUM_INT_REC(f,shared->node_size,shared->rkey_size);
+ shared->split_int_nrec = (shared->internal_nrec * shared->split_percent)/100;
+ shared->merge_int_nrec = (shared->internal_nrec * shared->merge_percent)/100;
+
+ shared->leaf_nrec = H5B2_NUM_LEAF_REC(shared->node_size,shared->rkey_size);
+ shared->split_leaf_nrec = (shared->leaf_nrec * shared->split_percent)/100;
+ shared->merge_leaf_nrec = (shared->leaf_nrec * shared->merge_percent)/100;
+
+ /* Assign common type information */
+ shared->type = type;
+
+ /* Allocate "page" for node I/O */
+ if((shared->page=H5FL_BLK_MALLOC(node_page,shared->node_size))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+ /* Create factory for internal node native record storage */
+ if((shared->int_fac=H5FL_fac_init(type->nkey_size*shared->internal_nrec))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, NULL, "can't create internal node native key block factory")
+
+ /* Create factory for leaf node native record storage */
+ if((shared->leaf_fac=H5FL_fac_init(type->nkey_size*shared->leaf_nrec))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, NULL, "can't create leaf node native key block factory")
+
+ /* Create factory for internal node node pointer storage */
+ if((shared->node_ptr_fac=H5FL_fac_init(sizeof(H5B2_node_ptr_t)*(shared->internal_nrec+1)))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, NULL, "can't create internal node node pointer block factory")
+
+ /* Allocate array of pointers to internal node native keys */
+ if((shared->int_nat_off=H5FL_SEQ_MALLOC(size_t,shared->internal_nrec))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+ /* Allocate array of pointers to leaf node native keys */
+ if((shared->leaf_nat_off=H5FL_SEQ_MALLOC(size_t,shared->leaf_nrec))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+ /* Allocate array of pointers to internal node node pointers */
+ if((shared->node_ptr_off=H5FL_SEQ_MALLOC(H5B2_node_ptr_t,(shared->internal_nrec+1)))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+ /* Initialize offsets in internal node native key block */
+ for(u=0; u<shared->internal_nrec; u++)
+ shared->int_nat_off[u]=type->nkey_size*u;
+
+ /* Initialize offsets in leaf node native key block */
+ for(u=0; u<shared->leaf_nrec; u++)
+ shared->leaf_nat_off[u]=type->nkey_size*u;
+
+ /* Initialize offsets in internal node node pointer block */
+ for(u=0; u<(shared->internal_nrec+1); u++)
+ shared->node_ptr_off[u]=sizeof(H5B2_node_ptr_t)*u;
+
+ /* Make shared B-tree info reference counted */
+ if(NULL==(bt2->shared=H5RC_create(shared,H5B2_shared_free)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "can't create ref-count wrapper for shared B-tree info")
+
+done:
+ if(ret_value<0)
+ if(shared)
+ H5B2_shared_free(shared);
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B2_shared_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_shared_free
+ *
+ * Purpose: Free shared B-tree info
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_shared_free (void *_shared)
+{
+ H5B2_shared_t *shared = (H5B2_shared_t *)_shared;
+ herr_t ret_value=SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT(H5B2_shared_free)
+
+ /* Sanity check */
+ HDassert(shared);
+
+ /* Free the B-tree node buffer */
+ if(shared->page)
+ H5FL_BLK_FREE(node_page,shared->page);
+
+ /* Destroy factory for internal node native record storage */
+ if(shared->int_fac)
+ if(H5FL_fac_term(shared->int_fac)<0)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_CANTRELEASE, FAIL, "can't destroy internal node native key block factory")
+
+ /* Destroy factory for leaf node native record storage */
+ if(shared->leaf_fac)
+ if(H5FL_fac_term(shared->leaf_fac)<0)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_CANTRELEASE, FAIL, "can't destroy leaf node native key block factory")
+
+ /* Destroy factory for internal node node pointer storage */
+ if(shared->node_ptr_fac)
+ if(H5FL_fac_term(shared->node_ptr_fac)<0)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_CANTRELEASE, FAIL, "can't destroy internal node node pointer block factory")
+
+ /* Free the array of offsets into the internal node native key block */
+ if(shared->int_nat_off)
+ H5FL_SEQ_FREE(size_t,shared->int_nat_off);
+
+ /* Free the array of offsets into the leaf node native key block */
+ if(shared->leaf_nat_off)
+ H5FL_SEQ_FREE(size_t,shared->leaf_nat_off);
+
+ /* Free the array of offsets into the internal node node pointer block */
+ if(shared->node_ptr_off)
+ H5FL_SEQ_FREE(H5B2_node_ptr_t,shared->node_ptr_off);
+
+ /* Free the shared B-tree info itself */
+ H5FL_FREE(H5B2_shared_t,shared);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B2_shared_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_create
+ *
+ * Purpose: Creates a new empty B-tree in the file.
+ *
+ * Return: Success: Pointer to a new B-tree.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 31 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+ size_t node_size, size_t rkey_size,
+ unsigned split_percent, unsigned merge_percent, haddr_t *addr_p)
+{
+ H5B2_t *bt2 = NULL; /* The new B-tree header information */
+ herr_t ret_value=SUCCEED;
+
+ FUNC_ENTER_NOAPI(H5B2_create, FAIL)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(f);
+ HDassert(type);
+ HDassert(node_size>0);
+ HDassert(rkey_size>0);
+ HDassert(merge_percent>0 && merge_percent<=100);
+ HDassert(split_percent>0 && split_percent<=100);
+ HDassert(merge_percent<(split_percent/2));
+
+ /*
+ * Allocate file and memory data structures.
+ */
+ if (NULL==(bt2 = H5FL_MALLOC(H5B2_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree header")
+
+ /* Assign internal information */
+ HDmemset(&bt2->cache_info,0,sizeof(H5AC_info_t));
+ bt2->cache_info.is_dirty = TRUE;
+ bt2->depth = 0;
+ bt2->root.addr = HADDR_UNDEF;
+ bt2->root.node_nrec = bt2->root.all_nrec = 0;
+
+ /* Initialize shared B-tree info */
+ if(H5B2_shared_init(f, bt2, type, node_size, rkey_size, split_percent, merge_percent)<0)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "can't create shared B-tree info")
+
+ /* Allocate space for the header on disk */
+ if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)H5B2_HEADER_SIZE(f))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree header")
+
+ /* Cache the new B-tree node */
+ if (H5AC_set(f, dxpl_id, H5AC_BT2_HDR, *addr_p, bt2, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree header to cache")
+
+done:
+ if (ret_value<0) {
+ if (bt2)
+ (void)H5B2_cache_hdr_dest(f,bt2);
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B2_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_hdr_load
+ *
+ * Purpose: Loads a B-tree header from the disk.
+ *
+ * Return: Success: Pointer to a new B-tree.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 1 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5B2_t *
+H5B2_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void UNUSED *udata)
+{
+ const H5B2_class_t *type = (const H5B2_class_t *) _type;
+ size_t node_size, rkey_size; /* Size info for B-tree */
+ unsigned split_percent, merge_percent; /* Split & merge info for B-tree */
+ H5B2_t *bt2 = NULL;
+ size_t size;
+ uint8_t *buf = NULL;
+ uint8_t *p; /* Pointer into raw data buffer */
+ H5B2_t *ret_value;
+
+ FUNC_ENTER_NOAPI(H5B2_cache_hdr_load, NULL)
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(type);
+
+ if (NULL==(bt2 = H5FL_MALLOC(H5B2_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HDmemset(&bt2->cache_info,0,sizeof(H5AC_info_t));
+
+ /* Compute the size of the B-tree header on disk */
+ size = H5B2_HEADER_SIZE(f);
+
+ /* Allocate temporary buffer */
+ if ((buf=H5FL_BLK_MALLOC(header_block,size))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+ /* Read header from disk */
+ if (H5F_block_read(f, H5FD_MEM_BTREE, addr, size, dxpl_id, buf)<0)
+ HGOTO_ERROR(H5E_BTREE, H5E_READERROR, NULL, "can't read B-tree header")
+
+ p = buf;
+
+ /* magic number */
+ if (HDmemcmp(p, H5B2_HDR_MAGIC, H5B2_SIZEOF_MAGIC))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree header signature")
+ p += H5B2_SIZEOF_MAGIC;
+
+ /* version */
+ if (*p++ != H5B2_HDR_VERSION)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree header version")
+
+ /* B-tree type */
+ if (*p++ != (uint8_t)type->id)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "incorrect B-tree type")
+
+ /* node size (in bytes) */
+ UINT32DECODE(p, node_size);
+
+ /* raw key size (in bytes) */
+ UINT16DECODE(p, rkey_size);
+
+ /* depth of tree */
+ UINT16DECODE(p, bt2->depth);
+
+ /* split & merge %s */
+ UINT16DECODE(p, split_percent);
+ UINT16DECODE(p, merge_percent);
+
+ /* root node pointer */
+ H5F_addr_decode(f, (const uint8_t **)&p, &(bt2->root.addr));
+ UINT16DECODE(p, bt2->root.node_nrec);
+ H5F_DECODE_LENGTH(f, p, bt2->root.all_nrec);
+
+ /* Initialize shared B-tree info */
+ if(H5B2_shared_init(f, bt2, type, node_size, rkey_size, split_percent, merge_percent)<0)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "can't create shared B-tree info")
+
+ /* Set return value */
+ ret_value = bt2;
+
+done:
+ if(buf)
+ H5FL_BLK_FREE(header_block,buf);
+ if (!ret_value && bt2)
+ (void)H5B2_cache_hdr_dest(f,bt2);
+ FUNC_LEAVE_NOAPI(ret_value)
+} /*lint !e818 Can't make udata a pointer to const */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_hdr_flush
+ *
+ * Purpose: Flushes a dirty B-tree header to disk.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 1 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B2_t *bt2)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5B2_cache_hdr_flush, FAIL)
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(bt2);
+
+ if (bt2->cache_info.is_dirty) {
+ H5B2_shared_t *shared; /* Shared B-tree information */
+ uint8_t *buf = NULL;
+ uint8_t *p; /* Pointer into raw data buffer */
+ size_t size;
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(bt2->shared);
+ HDassert(shared);
+
+ /* Compute the size of the B-tree header on disk */
+ size = H5B2_HEADER_SIZE(f);
+
+ /* Allocate temporary buffer */
+ if ((buf=H5FL_BLK_MALLOC(header_block,size))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+ p = buf;
+
+ /* magic number */
+ HDmemcpy(p, H5B2_HDR_MAGIC, H5B2_SIZEOF_MAGIC);
+ p += H5B2_SIZEOF_MAGIC;
+
+ /* version # */
+ *p++ = H5B2_HDR_VERSION;
+
+ /* b-tree type */
+ *p++ = shared->type->id;
+
+ /* node size (in bytes) */
+ UINT32ENCODE(p, shared->node_size);
+
+ /* raw key size (in bytes) */
+ UINT16ENCODE(p, shared->rkey_size);
+
+ /* depth of tree */
+ UINT16ENCODE(p, bt2->depth);
+
+ /* split & merge %s */
+ UINT16ENCODE(p, shared->split_percent);
+ UINT16ENCODE(p, shared->merge_percent);
+
+ /* root node pointer */
+ H5F_addr_encode(f, &p, bt2->root.addr);
+ UINT16ENCODE(p, bt2->root.node_nrec);
+ H5F_ENCODE_LENGTH(f, p, bt2->root.all_nrec);
+
+ /* Write the B-tree header. */
+ if (H5F_block_write(f, H5FD_MEM_BTREE, addr, size, dxpl_id, buf) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to save B-tree header to disk")
+
+ H5FL_BLK_FREE(header_block,buf);
+
+ bt2->cache_info.is_dirty = FALSE;
+ } /* end if */
+
+ if (destroy)
+ if (H5B2_cache_hdr_dest(f,bt2) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree header")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_cache_hdr_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B_cache_hdr_dest
+ *
+ * Purpose: Destroys a B-tree header in memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 1 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5B2_cache_hdr_dest(H5F_t UNUSED *f, H5B2_t *bt2)
+{
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_cache_hdr_dest)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(bt2);
+
+ /* Decrement reference count on shared B-tree info */
+ if(bt2->shared)
+ H5RC_DEC(bt2->shared);
+
+ /* Free B-tree header info */
+ H5FL_FREE(H5B2_t,bt2);
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5B2_cache_hdr_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_hdr_clear
+ *
+ * Purpose: Mark a B-tree header in memory as non-dirty.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 1 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_cache_hdr_clear(H5F_t *f, H5B2_t *bt2, hbool_t destroy)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT(H5B2_cache_hdr_clear)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(bt2);
+
+ /* Reset the dirty flag. */
+ bt2->cache_info.is_dirty = FALSE;
+
+ if (destroy)
+ if (H5B2_cache_hdr_dest(f, bt2) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree header")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B2_cache_hdr_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_hdr_size
+ *
+ * Purpose: Compute the size in bytes of a B-tree header
+ * on disk, and return it in *size_ptr. On failure,
+ * the value of *size_ptr is undefined.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 1 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_cache_hdr_size(const H5F_t *f, const H5B2_t UNUSED *bt2, size_t *size_ptr)
+{
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_cache_hdr_size)
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(size_ptr);
+
+ /* Set size value */
+ *size_ptr = H5B2_HEADER_SIZE(f);
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2_cache_hdr_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_locate_record
+ *
+ * Purpose: Performs a binary search to locate a record in a sorted
+ * array of records.
+ *
+ * Return: Success: Non-negative array index where new record
+ * should be inserted
+ *
+ * Failure: Negative, if record already is in array of
+ * records.
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 3 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5B2_locate_record(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+ unsigned nrec, size_t *rec_off, const uint8_t *native,
+ const void *udata)
+{
+ unsigned lo = 0, hi; /* Low & high index values */
+ int idx = 0; /* Final index value */
+ int cmp = -1; /* Key comparison value */
+
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_locate_record)
+
+ hi = nrec;
+ while (lo < hi && cmp) {
+ idx = (lo + hi) / 2;
+ if ((cmp = (type->compare)(f, dxpl_id, udata, native+rec_off[idx])) < 0)
+ hi = idx;
+ else
+ lo = idx + 1;
+ }
+ if(cmp==0)
+ idx=(-1);
+ else if(cmp>0)
+ idx++;
+
+ FUNC_LEAVE_NOAPI(idx);
+} /* end H5B2_locate_record */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_insert
+ *
+ * Purpose: Adds a new record to the B-tree. If the root node of
+ * the B-tree splits then the B-tree header tracks the new
+ * root node created.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_insert(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr_t addr,
+ void *udata)
+{
+ H5AC_info_t *cache_info; /* Parent node's cache info */
+ H5B2_t *bt2=NULL; /* Pointer to the B-tree header */
+ H5B2_shared_t *shared; /* Pointer to B-tree's shared information */
+ H5B2_node_ptr_t *node_ptr; /* Pointer to node pointer info for current node */
+ unsigned depth; /* Current depth of node */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI(H5B2_insert, FAIL)
+
+ /* Check arguments. */
+ HDassert(f);
+ HDassert(type);
+ HDassert(H5F_addr_defined(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_CANTLOAD, FAIL, "unable to load B-tree header")
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(bt2->shared);
+ HDassert(shared);
+
+ /* Check if the root node is allocated yet */
+ if(!H5F_addr_defined(bt2->root.addr)) {
+ /* Create root node as leaf node in B-tree */
+ if(H5B2_create_leaf(f, dxpl_id, bt2, &(bt2->root))<0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create root node")
+
+ /* Mark B-tree header as dirty, since we updated the address of the root node */
+ bt2->cache_info.is_dirty = TRUE;
+ } /* end if */
+depth=bt2->depth;
+node_ptr=&(bt2->root);
+cache_info=&(bt2->cache_info);
+
+ /* Check if we are inserting in internal or leaf node */
+ if(depth==0) {
+ H5B2_leaf_t *leaf=NULL; /* Pointer to leaf node */
+ int idx; /* Location of record which matches key */
+
+ /* Look up the B-tree leaf node */
+ if (NULL == (leaf = H5AC_protect(f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, shared->type, node_ptr, H5AC_WRITE)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree leaf node")
+
+ /* Check for inserting into empty leaf */
+ if(node_ptr->node_nrec==0)
+ idx=0;
+ else {
+ /* Find correct location to insert this record and make room for it */
+ if((idx=H5B2_locate_record(f,dxpl_id,shared->type,leaf->nrec,shared->leaf_nat_off,leaf->leaf_native,udata))<0) {
+ /* Release the B-tree leaf node */
+ if (H5AC_unprotect(f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree leaf node")
+
+ HGOTO_ERROR(H5E_BTREE, H5E_EXISTS, FAIL, "record is already in B-tree")
+ } /* end if */
+
+ /* Make room for new record */
+ if((unsigned)idx<leaf->nrec)
+ HDmemmove(H5B2_LEAF_NKEY(leaf,shared,idx+1),H5B2_LEAF_NKEY(leaf,shared,idx),shared->type->nkey_size*(leaf->nrec-idx));
+ } /* end else */
+
+ /* Make callback to store record in native form */
+ if((shared->type->store)(f,dxpl_id,udata,H5B2_LEAF_NKEY(leaf,shared,idx))<0) {
+ /* Release the B-tree leaf node */
+ if (H5AC_unprotect(f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree leaf node")
+
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, FAIL, "unable to insert record into leaf node")
+ } /* end if */
+
+ /* Update record # info in node pointer */
+ node_ptr->all_nrec++;
+ node_ptr->node_nrec++;
+
+ /* Update number of records in node */
+ leaf->nrec++;
+ HDassert(node_ptr->node_nrec==leaf->nrec);
+
+ /* Mark parent's node as dirty now */
+ cache_info->is_dirty = TRUE;
+
+ /* Mark leaf node as dirty also */
+ leaf->cache_info.is_dirty = TRUE;
+
+ /* Release the B-tree leaf node */
+ if (H5AC_unprotect(f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree leaf node")
+ } /* end if */
+ else {
+ } /* end else */
+
+done:
+ if (bt2 && H5AC_unprotect(f, dxpl_id, H5AC_BT2_HDR, addr, bt2, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree header")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_insert() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_create_leaf
+ *
+ * Purpose: Creates empty leaf node of a B-tree and update node pointer
+ * to point to it.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_create_leaf(H5F_t *f, hid_t dxpl_id, H5B2_t *bt2, H5B2_node_ptr_t *node_ptr)
+{
+ H5B2_leaf_t *leaf=NULL; /* Pointer to new leaf node created */
+ H5B2_shared_t *shared; /* Shared B-tree information */
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI(H5B2_create_leaf, FAIL)
+
+ /* Check arguments. */
+ HDassert(f);
+ HDassert(bt2);
+ HDassert(node_ptr);
+
+ /* Allocate memory for leaf information */
+ if (NULL==(leaf = H5FL_MALLOC(H5B2_leaf_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree leaf info")
+
+ /* Set metadata cache info */
+ HDmemset(&leaf->cache_info,0,sizeof(H5AC_info_t));
+ leaf->cache_info.is_dirty = TRUE;
+
+ /* Share common B-tree information */
+ leaf->shared = bt2->shared;
+ H5RC_INC(leaf->shared);
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(leaf->shared);
+ HDassert(shared);
+
+ /* Allocate space for the native keys in memory */
+ if((leaf->leaf_native=H5FL_FAC_MALLOC(shared->leaf_fac))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree leaf native keys")
+
+ /* Set number of records */
+ leaf->nrec=0;
+
+ /* Allocate space on disk for the leaf */
+ if (HADDR_UNDEF==(node_ptr->addr=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)shared->node_size)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree header")
+
+ /* Cache the new B-tree node */
+ if (H5AC_set(f, dxpl_id, H5AC_BT2_LEAF, node_ptr->addr, leaf, H5AC__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree leaf to cache")
+
+done:
+ if (ret_value<0) {
+ if (leaf)
+ (void)H5B2_cache_leaf_dest(f,leaf);
+ } /* end if */
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_create_leaf() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_leaf_load
+ *
+ * Purpose: Loads a B-tree leaf from the disk.
+ *
+ * Return: Success: Pointer to a new B-tree leaf node.
+ *
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5B2_leaf_t *
+H5B2_cache_leaf_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_bt2, void *_node_ptr)
+{
+ const H5B2_t *bt2 = (const H5B2_t *)_bt2;
+ H5B2_node_ptr_t *node_ptr = (H5B2_node_ptr_t *)_node_ptr;
+ H5B2_leaf_t *leaf = NULL;
+ H5B2_shared_t *shared; /* Shared B-tree information */
+ uint8_t *p; /* Pointer into raw data buffer */
+ H5B2_leaf_t *ret_value;
+
+ FUNC_ENTER_NOAPI(H5B2_cache_leaf_load, NULL)
+
+ /* Check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(bt2);
+
+ if (NULL==(leaf = H5FL_MALLOC(H5B2_leaf_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HDmemset(&leaf->cache_info,0,sizeof(H5AC_info_t));
+
+ /* Share common B-tree information */
+ leaf->shared = bt2->shared;
+ H5RC_INC(leaf->shared);
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(leaf->shared);
+ HDassert(shared);
+
+ /* Read header from disk */
+ if (H5F_block_read(f, H5FD_MEM_BTREE, addr, shared->node_size, dxpl_id, shared->page)<0)
+ HGOTO_ERROR(H5E_BTREE, H5E_READERROR, NULL, "can't read B-tree leaf node")
+
+ p = shared->page;
+
+ /* magic number */
+ if (HDmemcmp(p, H5B2_LEAF_MAGIC, H5B2_SIZEOF_MAGIC))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree leaf node signature")
+ p += H5B2_SIZEOF_MAGIC;
+
+ /* version */
+ if (*p++ != H5B2_LEAF_VERSION)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree header version")
+
+ /* B-tree type */
+ if (*p++ != (uint8_t)shared->type->id)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "incorrect B-tree type")
+
+ /* Allocate space for the native keys in memory */
+ if((leaf->leaf_native=H5FL_FAC_MALLOC(shared->leaf_fac))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for B-tree leaf native keys")
+
+HDfprintf(stderr,"%s: Deserialize leaf node records here!, node_ptr->node_nrec=%u\n",FUNC,node_ptr->node_nrec);
+
+ /* Set return value */
+ ret_value = leaf;
+
+done:
+ if (!ret_value && leaf)
+ (void)H5B2_cache_leaf_dest(f,leaf);
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_cache_leaf_load() */ /*lint !e818 Can't make udata a pointer to const */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_leaf_flush
+ *
+ * Purpose: Flushes a dirty B-tree leaf node to disk.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_cache_leaf_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B2_leaf_t *leaf)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5B2_cache_leaf_flush, FAIL)
+
+ /* check arguments */
+ HDassert(f);
+ HDassert(H5F_addr_defined(addr));
+ HDassert(leaf);
+
+ if (leaf->cache_info.is_dirty) {
+ H5B2_shared_t *shared; /* Shared B-tree information */
+ uint8_t *p; /* Pointer into raw data buffer */
+ uint8_t *native; /* Pointer to native keys */
+ unsigned u; /* Local index variable */
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(leaf->shared);
+ HDassert(shared);
+
+ p = shared->page;
+
+ /* magic number */
+ HDmemcpy(p, H5B2_HDR_MAGIC, H5B2_SIZEOF_MAGIC);
+ p += H5B2_SIZEOF_MAGIC;
+
+ /* version # */
+ *p++ = H5B2_LEAF_VERSION;
+
+ /* b-tree type */
+ *p++ = shared->type->id;
+
+ /* Serialize records for leaf node */
+ native=leaf->leaf_native;
+ for(u=0; u<leaf->nrec; u++) {
+ /* Encode record */
+ if((shared->type->encode)(f,p,native)<0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTENCODE, FAIL, "enable to encode B-tree record");
+
+ /* Move to next record */
+ p += shared->rkey_size;
+ native += shared->type->nkey_size;
+ } /* end for */
+
+ /* Write the B-tree leaf node */
+ if (H5F_block_write(f, H5FD_MEM_BTREE, addr, shared->node_size, dxpl_id, shared->page) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to save B-tree leaf node to disk")
+
+ leaf->cache_info.is_dirty = FALSE;
+ } /* end if */
+
+ if (destroy)
+ if (H5B2_cache_leaf_dest(f,leaf) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree leaf node")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B2_cache_leaf_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B_cache_leaf_dest
+ *
+ * Purpose: Destroys a B-tree leaf node in memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5B2_cache_leaf_dest(H5F_t UNUSED *f, H5B2_leaf_t *leaf)
+{
+ H5B2_shared_t *shared; /* Shared B-tree information */
+
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_cache_leaf_dest)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(leaf);
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(leaf->shared);
+ HDassert(shared);
+
+ /* Release leaf's native key buffer */
+ if(leaf->leaf_native)
+ H5FL_FAC_FREE(shared->leaf_fac,leaf->leaf_native);
+
+ /* Decrement reference count on shared B-tree info */
+ if(leaf->shared)
+ H5RC_DEC(leaf->shared);
+
+ /* Free B-tree leaf node info */
+ H5FL_FREE(H5B2_leaf_t,leaf);
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5B2_cache_leaf_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_leaf_clear
+ *
+ * Purpose: Mark a B-tree leaf node in memory as non-dirty.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_cache_leaf_clear(H5F_t *f, H5B2_leaf_t *leaf, hbool_t destroy)
+{
+ herr_t ret_value = SUCCEED;
+
+ FUNC_ENTER_NOAPI_NOINIT(H5B2_cache_leaf_clear)
+
+ /*
+ * Check arguments.
+ */
+ HDassert(leaf);
+
+ /* Reset the dirty flag. */
+ leaf->cache_info.is_dirty = FALSE;
+
+ if (destroy)
+ if (H5B2_cache_leaf_dest(f, leaf) < 0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree leaf node")
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B2_cache_leaf_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_cache_leaf_size
+ *
+ * Purpose: Compute the size in bytes of a B-tree leaf node
+ * on disk, and return it in *size_ptr. On failure,
+ * the value of *size_ptr is undefined.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B2_cache_leaf_size(const H5F_t UNUSED *f, const H5B2_leaf_t *leaf, size_t *size_ptr)
+{
+ H5B2_shared_t *shared; /* Shared B-tree information */
+
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B2_cache_leaf_size)
+
+ /* check arguments */
+ HDassert(leaf);
+ HDassert(size_ptr);
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(leaf->shared);
+ HDassert(shared);
+
+ /* Set size value */
+ *size_ptr = shared->node_size;
+
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5B2_cache_leaf_size() */
+
diff --git a/src/H5B2dbg.c b/src/H5B2dbg.c
new file mode 100644
index 0000000..6e8af60
--- /dev/null
+++ b/src/H5B2dbg.c
@@ -0,0 +1,138 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created: H5B2dbg.c
+ * Feb 2 2005
+ * Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose: Dump debugging information about a v2 B-tree.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5B2_PACKAGE /*suppress error about including H5B2pkg */
+
+/* Private headers */
+#include "H5private.h" /* Generic Functions */
+#include "H5B2pkg.h" /* B-trees */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5FLprivate.h" /* Free Lists */
+
+/* H5B2 inherits cache-like properties from H5AC */
+extern const H5AC_class_t H5AC_BT2_HDR[1];
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5B2_hdr_debug
+ *
+ * Purpose: Prints debugging info about a B-tree header.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Feb 2 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B2_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
+ const H5B2_class_t *type)
+{
+ H5B2_t *bt2 = NULL;
+ H5B2_shared_t *shared; /* Shared B-tree information */
+ herr_t ret_value=SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5B2_hdr_debug, FAIL)
+
+ /*
+ * Check arguments.
+ */
+ assert(f);
+ assert(H5F_addr_defined(addr));
+ assert(stream);
+ assert(indent >= 0);
+ assert(fwidth >= 0);
+
+ /*
+ * Load the b-tree header.
+ */
+ if (NULL == (bt2 = H5AC_protect(f, dxpl_id, H5AC_BT2_HDR, addr, type, NULL, H5AC_READ)))
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree header")
+
+ /* Get the pointer to the shared B-tree info */
+ shared=H5RC_GET_OBJ(bt2->shared);
+ assert(shared);
+
+ /*
+ * Print the values.
+ */
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Tree type ID:",
+ ((shared->type->id)==H5B2_GRP_NAME_ID ? "H5B2_GRP_NAME_ID" : "Unknown!"));
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Size of node:",
+ shared->node_size);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Size of raw (disk) key:",
+ shared->rkey_size);
+ HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+ "Dirty flag:",
+ bt2->cache_info.is_dirty ? "True" : "False");
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Depth:",
+ bt2->depth);
+ HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+ "Number of records in tree:",
+ bt2->root.all_nrec);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Number of records in root node:",
+ bt2->root.node_nrec);
+ HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+ "Address of root node:",
+ bt2->root.addr);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Max. number of records per internal node:",
+ shared->internal_nrec);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Max. number of records per leaf node:",
+ shared->leaf_nrec);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Split percent:",
+ shared->split_percent);
+ HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+ "Merge percent:",
+ shared->merge_percent);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Internal records to split at:",
+ shared->split_int_nrec);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Leaf records to split at:",
+ shared->split_leaf_nrec);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Internal records to merge at:",
+ shared->merge_int_nrec);
+ HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+ "Leaf records to merge at:",
+ shared->merge_leaf_nrec);
+
+done:
+ if (bt2 && H5AC_unprotect(f, dxpl_id, H5AC_BT2_HDR, addr, bt2, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree header")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+}
+
diff --git a/src/H5B2pkg.h b/src/H5B2pkg.h
new file mode 100644
index 0000000..1f98cac
--- /dev/null
+++ b/src/H5B2pkg.h
@@ -0,0 +1,118 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Monday, January 31, 2005
+ *
+ * Purpose: This file contains declarations which are visible only within
+ * the H5B2 package. Source files outside the H5B2 package should
+ * include H5B2private.h instead.
+ */
+#ifndef H5B2_PACKAGE
+#error "Do not include this file outside the H5B2 package!"
+#endif
+
+#ifndef _H5B2pkg_H
+#define _H5B2pkg_H
+
+/* Get package's private header */
+#include "H5B2private.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h" /* Metadata cache */
+#include "H5FLprivate.h" /* Free Lists */
+#include "H5RCprivate.h" /* Reference counted object functions */
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* Size of signature information (on disk) */
+#define H5B2_SIZEOF_MAGIC 4
+
+/* B-tree signatures */
+#define H5B2_HDR_MAGIC "BTHD" /* Header */
+#define H5B2_LEAF_MAGIC "BTLF" /* Leaf node */
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/* A "node pointer" to another B-tree node */
+typedef struct {
+ haddr_t addr; /* Address of other node */
+ unsigned node_nrec; /* Number of records used in node pointed to */
+ hsize_t all_nrec; /* Number of records in node pointed to and all it's children */
+} H5B2_node_ptr_t;
+
+/* Each B-tree has certain information that can be shared across all
+ * the instances of nodes in that B-tree.
+ */
+typedef struct H5B2_shared_t {
+ /* Shared internal data structures */
+ const H5B2_class_t *type; /* Type of tree */
+ uint8_t *page; /* Disk page */
+ H5FL_fac_head_t *int_fac; /* Factory for internal node native key blocks */
+ H5FL_fac_head_t *leaf_fac; /* Factory for leaf node native key blocks */
+ H5FL_fac_head_t *node_ptr_fac; /* Factory for internal node node pointer blocks */
+ size_t *int_nat_off; /* Array of offsets of native keys in internal node block */
+ size_t *leaf_nat_off; /* Array of offsets of native keys in leaf node block */
+ size_t *node_ptr_off; /* Array of offsets of node pointers in internal node block */
+
+ /* Information set by user */
+ unsigned split_percent; /* Percent full at which to split the node, when inserting */
+ unsigned merge_percent; /* Percent full at which to merge the node, when deleting */
+ size_t node_size; /* Size of all nodes, in bytes */
+ size_t rkey_size; /* Size of "raw" (on disk) key, in bytes */
+
+ /* Derived information from user's information */
+ size_t internal_nrec; /* Number of records which fit into an internal node */
+ size_t split_int_nrec; /* Number of records to split an internal node at */
+ size_t merge_int_nrec; /* Number of records to merge an internal node at */
+ size_t leaf_nrec; /* Number of records which fit into a leaf node */
+ size_t split_leaf_nrec; /* Number of records to split a leaf node at */
+ size_t merge_leaf_nrec; /* Number of records to merge a leaf node at */
+} H5B2_shared_t;
+
+/* The B-tree information */
+typedef struct H5B2_t {
+ /* Information for H5AC cache functions, _must_ be first field in structure */
+ H5AC_info_t cache_info;
+
+ /* Internal B-tree information */
+ unsigned depth; /* B-tree's overall depth */
+ H5B2_node_ptr_t root; /* Node pointer to root node in B-tree */
+ H5RC_t *shared; /* Ref-counted shared info */
+} H5B2_t;
+
+/* B-tree leaf information */
+typedef struct H5B2_leaf_t {
+ /* Information for H5AC cache functions, _must_ be first field in structure */
+ H5AC_info_t cache_info;
+
+ /* Internal B-tree information */
+ H5RC_t *shared; /* Ref-counted shared info */
+ uint8_t *leaf_native; /* Pointer to native keys */
+ unsigned nrec; /* Number of records in leaf node */
+} H5B2_leaf_t;
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+H5_DLL herr_t H5B2_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+ FILE *stream, int indent, int fwidth, const H5B2_class_t *type);
+
+#endif /* _H5B2pkg_H */
+
diff --git a/src/H5B2private.h b/src/H5B2private.h
new file mode 100644
index 0000000..5d8d42a
--- /dev/null
+++ b/src/H5B2private.h
@@ -0,0 +1,91 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created: H5B2private.h
+ * Jan 31 2005
+ * Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose: Private header for library accessible B-tree routines.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5B2private_H
+#define _H5B2private_H
+
+/* Include package's public header */
+#include "H5B2public.h"
+
+/* Private headers needed by this file */
+#include "H5Fprivate.h" /* File access */
+
+/**************************/
+/* Library Private Macros */
+/**************************/
+
+/*
+ * Feature: Define this constant if you want to check B-tree consistency
+ * after each B-tree operation. Note that this slows down the
+ * library considerably! Debugging the B-tree depends on assert()
+ * being enabled.
+ */
+/* #define H5B2_DEBUG */
+
+/****************************/
+/* Library Private Typedefs */
+/****************************/
+
+/* B-tree IDs for various internal things. */
+/* Not really a "public" symbol, but that should be OK -QAK */
+/* Note - if more of these are added, any 'K' values (for internal or leaf
+ * nodes) they use will need to be stored in the file somewhere. -QAK
+ */
+typedef enum H5B2_subid_t {
+ H5B2_GRP_NAME_ID = 0, /* B-tree is for group links, ordered by name */
+ H5B2_NUM_BTREE_ID /* Number of B-tree key IDs (must be last) */
+} H5B2_subid_t;
+
+/*
+ * Each class of object that can be pointed to by a B-link tree has a
+ * variable of this type that contains class variables and methods.
+ */
+typedef struct H5B2_class_t {
+ H5B2_subid_t id; /*id as found in file*/
+ size_t nkey_size; /*size of native (memory) key*/
+
+ /* Store & retrieve records */
+ herr_t (*store)(const H5F_t *f, hid_t dxpl_id, const void *udata, void *nrecord); /* Store record in native key table */
+
+ /* Compare records, according to a key */
+ herr_t (*compare)(const H5F_t *f, hid_t dxpl_id, const void *rec1, const void *rec2); /* Compare two native records */
+
+ /* Encode, decode, debug record values */
+ herr_t (*encode)(const H5F_t *f, uint8_t *raw, const void *record); /* Store record in native key table */
+
+} H5B2_class_t;
+
+/***************************************/
+/* Library-private Function Prototypes */
+/***************************************/
+H5_DLL herr_t H5B2_create(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+ size_t node_size, size_t rkey_size,
+ unsigned split_percent, unsigned merge_percent,
+ haddr_t *addr_p);
+H5_DLL herr_t H5B2_insert(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type,
+ haddr_t addr, void *udata);
+
+#endif /* _H5B2private_H */
+
diff --git a/src/H5B2public.h b/src/H5B2public.h
new file mode 100644
index 0000000..55a866b
--- /dev/null
+++ b/src/H5B2public.h
@@ -0,0 +1,52 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created: H5B2public.h
+ * Jan 31 2005
+ * Quincey Koziol <koziol@ncsa.uiuc.edu>
+ *
+ * Purpose: Public declarations for the H5B2 package.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5B2public_H
+#define _H5B2public_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*****************/
+/* Public Macros */
+/*****************/
+
+/*******************/
+/* Public Typedefs */
+/*******************/
+
+/**********************************/
+/* Public API Function Prototypes */
+/**********************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5B2public_H */
+
diff --git a/src/H5FL.c b/src/H5FL.c
index 3041b57..be5ff8d 100644
--- a/src/H5FL.c
+++ b/src/H5FL.c
@@ -105,6 +105,9 @@ static herr_t H5FL_arr_gc_list(H5FL_arr_head_t *head);
static herr_t H5FL_blk_gc(void);
static herr_t H5FL_blk_gc_list(H5FL_blk_head_t *head);
+/* Declare a free list to manage the H5FL_fac_head_t struct */
+H5FL_DEFINE(H5FL_fac_head_t);
+
/* Declare a free list to manage the H5FL_blk_node_t struct */
H5FL_DEFINE(H5FL_blk_node_t);
@@ -1775,6 +1778,191 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5FL_fac_init
+ *
+ * Purpose: Initialize a block factory
+ *
+ * Return: Success: Pointer to factory object
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, February 2, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5FL_fac_head_t *
+H5FL_fac_init(size_t size)
+{
+ H5FL_fac_head_t *factory; /* Pointer to new block factory */
+ H5FL_fac_head_t *ret_value; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5FL_fac_init, NULL)
+
+ /* Sanity check */
+ HDassert(size>0);
+
+ /* Allocate room for the new factory */
+ if(NULL==(factory=H5FL_MALLOC(H5FL_fac_head_t)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for factory object")
+
+ /* Initialize block header information */
+ HDmemset(&(factory->queue),0,sizeof(H5FL_blk_head_t));
+
+ /* Set size of blocks for factory */
+ factory->size=size;
+
+ /* Set return value */
+ ret_value=factory;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_fac_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FL_fac_free
+ *
+ * Purpose: Release a block back to a factory & put on free list
+ *
+ * Return: Success: Non-negative
+ * Failure: Negative
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, February 2, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_fac_free(H5FL_fac_head_t *head, void *obj)
+{
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_fac_free)
+
+ /* Double check parameters */
+ assert(head);
+ assert(obj);
+
+ /* Make certain that the free list is initialized */
+ assert(head->queue.init);
+
+ /* Use block routine */
+ H5FL_blk_free(&(head->queue),obj);
+
+ FUNC_LEAVE_NOAPI(NULL)
+} /* end H5FL_fac_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FL_fac_malloc
+ *
+ * Purpose: Allocate a block from a factory
+ *
+ * Return: Success: Pointer to a valid sequence object
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, February 2, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_fac_malloc(H5FL_fac_head_t *head)
+{
+ void *ret_value; /* Pointer to object to return */
+
+ FUNC_ENTER_NOAPI(H5FL_fac_malloc, NULL)
+
+ /* Double check parameters */
+ assert(head);
+
+ /* Use block routine */
+ ret_value=H5FL_blk_malloc(&(head->queue),head->size);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_fac_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FL_fac_calloc
+ *
+ * Purpose: Allocate a block from a factory and clear it to zeros
+ *
+ * Return: Success: Pointer to a valid array object
+ * Failure: NULL
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, February 2, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_fac_calloc(H5FL_fac_head_t *head)
+{
+ void *ret_value; /* Pointer to object to return */
+
+ FUNC_ENTER_NOAPI(H5FL_fac_calloc, NULL)
+
+ /* Double check parameters */
+ assert(head);
+
+ /* Use block routine */
+ ret_value=H5FL_blk_calloc(&(head->queue),head->size);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_fac_calloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FL_fac_term
+ *
+ * Purpose: Terminate a block factory
+ *
+ * Return: Success: non-negative
+ * Failure: negative
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, February 2, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FL_fac_term(H5FL_fac_head_t *factory)
+{
+ herr_t ret_value=SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5FL_fac_term)
+
+ /* Sanity check */
+ HDassert(factory);
+
+ /* Garbage collect all the blocks in the factory's free list */
+ if(H5FL_blk_gc_list(&(factory->queue))<0)
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "garbage collection of factory failed")
+
+ /* Verify that all the blocks have been freed */
+ if(factory->queue.allocated>0)
+ HGOTO_ERROR(H5E_RESOURCE, H5E_CANTRELEASE, FAIL, "factory still has objects allocated")
+
+ /* Free factory info */
+ H5FL_FREE(H5FL_fac_head_t,factory);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_fac_term() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5FL_garbage_coll
*
* Purpose: Garbage collect on all the free lists
diff --git a/src/H5FLprivate.h b/src/H5FLprivate.h
index 641a630..cc19d99 100644
--- a/src/H5FLprivate.h
+++ b/src/H5FLprivate.h
@@ -41,6 +41,7 @@
#define H5_NO_ARR_FREE_LISTS
#define H5_NO_SEQ_FREE_LISTS
#define H5_NO_BLK_FREE_LISTS
+#define H5_NO_FAC_FREE_LISTS
#endif /* H5_NO_FREE_LISTS */
/*
@@ -297,6 +298,35 @@ typedef struct H5FL_seq_head_t {
#define H5FL_SEQ_REALLOC(t,obj,new_elem) H5MM_realloc(obj,(new_elem)*sizeof(t))
#endif /* H5_NO_SEQ_FREE_LISTS */
+/* Data structure for free list block factory */
+typedef struct H5FL_fac_head_t {
+ H5FL_blk_head_t queue; /* Priority queue of blocks */
+ size_t size; /* Size of the blocks managed */
+} H5FL_fac_head_t;
+
+/*
+ * Macros for defining & using free list factories
+ *
+ * Factories are dynamically created free list managers for blocks of
+ * a particular size.
+ *
+ */
+#ifndef H5_NO_FAC_FREE_LISTS
+/* Allocate a block from a factory */
+#define H5FL_FAC_MALLOC(t) H5FL_fac_malloc(t)
+
+/* Allocate a block from a factory and clear it to all zeros */
+#define H5FL_FAC_CALLOC(t) H5FL_fac_calloc(t)
+
+/* Return a block to a factory */
+#define H5FL_FAC_FREE(t,obj) H5FL_fac_free(t,obj)
+
+#else /* H5_NO_FAC_FREE_LISTS */
+#define H5FL_FAC_MALLOC(t) H5MM_malloc(t->size)
+#define H5FL_FAC_CALLOC(t) H5MM_calloc(t->size)
+#define H5FL_FAC_FREE(t,obj) H5MM_xfree(obj)
+#endif /* H5_NO_FAC_FREE_LISTS */
+
/*
* Library prototypes.
*/
@@ -316,6 +346,11 @@ H5_DLL void * H5FL_seq_malloc(H5FL_seq_head_t *head, size_t elem);
H5_DLL void * H5FL_seq_calloc(H5FL_seq_head_t *head, size_t elem);
H5_DLL void * H5FL_seq_free(H5FL_seq_head_t *head, void *obj);
H5_DLL void * H5FL_seq_realloc(H5FL_seq_head_t *head, void *obj, size_t new_elem);
+H5_DLL H5FL_fac_head_t *H5FL_fac_init(size_t size);
+H5_DLL void * H5FL_fac_malloc(H5FL_fac_head_t *head);
+H5_DLL void * H5FL_fac_calloc(H5FL_fac_head_t *head);
+H5_DLL void * H5FL_fac_free(H5FL_fac_head_t *head, void *obj);
+H5_DLL herr_t H5FL_fac_term(H5FL_fac_head_t *head);
H5_DLL herr_t H5FL_garbage_coll(void);
H5_DLL herr_t H5FL_set_free_list_limits(int reg_global_lim, int reg_list_lim,
int arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim);
diff --git a/src/Makefile.am b/src/Makefile.am
index b3ade6d..112b9e9 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -39,7 +39,9 @@ MOSTLYCLEANFILES=H5detect.o H5detect.lo H5detect H5Tinit.o H5Tinit.lo H5Tinit.c
DISTCLEAN=libhdf5.settings
# library sources
-libhdf5_la_SOURCES= H5.c H5A.c H5AC.c H5B.c H5C.c H5D.c H5Dcontig.c H5Dcompact.c \
+libhdf5_la_SOURCES= H5.c H5A.c H5AC.c H5B.c H5B2.c H5B2dbg.c H5C.c H5D.c \
+ H5Dcontig.c \
+ H5Dcompact.c \
H5Defl.c H5Dio.c H5Distore.c H5Dmpio.c H5Dselect.c H5Dtest.c H5E.c H5F.c \
H5Fdbg.c H5FD.c H5FDcore.c \
H5FDfamily.c H5FDfphdf5.c H5FDgass.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
@@ -61,7 +63,8 @@ libhdf5_la_SOURCES= H5.c H5A.c H5AC.c H5B.c H5C.c H5D.c H5Dcontig.c H5Dcompact.c
# Public headers
-include_HEADERS =H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Cpublic.h H5Dpublic.h \
+include_HEADERS =H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5B2public.h \
+ H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDfamily.h \
H5FDfphdf5.h H5FDgass.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDsec2.h H5FDsrb.h H5FDstdio.h H5FDstream.h H5FPpublic.h \
@@ -70,7 +73,8 @@ include_HEADERS =H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Cpublic.h H5D
H5Tpublic.h H5Zpublic.h H5pubconf.h hdf5.h H5api_adpt.h
# Private headers
-#noinst_HEADERS =H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \
+#noinst_HEADERS =H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \
+# H5B2private.h \
# H5Dprivate.h H5Eprivate.h H5Fprivate.h H5FDprivate.h H5FLprivate.h \
# H5FOprivate.h H5FSprivate.h H5Gprivate.h H5Gpkg.h \
# H5HGprivate.h H5HLprivate.h H5HPprivate.h H5Iprivate.h H5MFprivate.h \
diff --git a/src/Makefile.in b/src/Makefile.in
index a2a53b9..b42082d 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -219,7 +219,9 @@ MOSTLYCLEANFILES = H5detect.o H5detect.lo H5detect H5Tinit.o H5Tinit.lo H5Tinit.
DISTCLEAN = libhdf5.settings
# library sources
-libhdf5_la_SOURCES = H5.c H5A.c H5AC.c H5B.c H5C.c H5D.c H5Dcontig.c H5Dcompact.c \
+libhdf5_la_SOURCES = H5.c H5A.c H5AC.c H5B.c H5B2.c H5B2dbg.c H5C.c H5D.c \
+ H5Dcontig.c \
+ H5Dcompact.c \
H5Defl.c H5Dio.c H5Distore.c H5Dmpio.c H5Dselect.c H5Dtest.c H5E.c H5F.c \
H5Fdbg.c H5FD.c H5FDcore.c \
H5FDfamily.c H5FDfphdf5.c H5FDgass.c H5FDlog.c H5FDmpi.c H5FDmpio.c \
@@ -241,7 +243,8 @@ libhdf5_la_SOURCES = H5.c H5A.c H5AC.c H5B.c H5C.c H5D.c H5Dcontig.c H5Dcompact.
# Public headers
-include_HEADERS = H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Cpublic.h H5Dpublic.h \
+include_HEADERS = H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5B2public.h \
+ H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDfamily.h \
H5FDfphdf5.h H5FDgass.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDsec2.h H5FDsrb.h H5FDstdio.h H5FDstream.h H5FPpublic.h \
@@ -251,7 +254,8 @@ include_HEADERS = H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Cpublic.h H5
# Private headers
-#noinst_HEADERS =H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \
+#noinst_HEADERS =H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \
+# H5B2private.h \
# H5Dprivate.h H5Eprivate.h H5Fprivate.h H5FDprivate.h H5FLprivate.h \
# H5FOprivate.h H5FSprivate.h H5Gprivate.h H5Gpkg.h \
# H5HGprivate.h H5HLprivate.h H5HPprivate.h H5Iprivate.h H5MFprivate.h \
@@ -284,27 +288,27 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
libhdf5_la_LDFLAGS =
libhdf5_la_LIBADD =
-am_libhdf5_la_OBJECTS = H5.lo H5A.lo H5AC.lo H5B.lo H5C.lo H5D.lo \
- H5Dcontig.lo H5Dcompact.lo H5Defl.lo H5Dio.lo H5Distore.lo \
- H5Dmpio.lo H5Dselect.lo H5Dtest.lo H5E.lo H5F.lo H5Fdbg.lo \
- H5FD.lo H5FDcore.lo H5FDfamily.lo H5FDfphdf5.lo H5FDgass.lo \
- H5FDlog.lo H5FDmpi.lo H5FDmpio.lo H5FDmpiposix.lo H5FDmulti.lo \
- H5FDsec2.lo H5FDsrb.lo H5FDstdio.lo H5FDstream.lo H5FL.lo \
- H5FO.lo H5FP.lo H5FPclient.lo H5FPserver.lo H5FS.lo H5G.lo \
- H5Gent.lo H5Gnode.lo H5Gstab.lo H5HG.lo H5HGdbg.lo H5HL.lo \
- H5HLdbg.lo H5HP.lo H5I.lo H5MF.lo H5MM.lo H5O.lo H5Oattr.lo \
- H5Obogus.lo H5Ocont.lo H5Odtype.lo H5Oefl.lo H5Ofill.lo \
- H5Olayout.lo H5Omtime.lo H5Oname.lo H5Onull.lo H5Opline.lo \
- H5Osdspace.lo H5Oshared.lo H5Ostab.lo H5P.lo H5Pdcpl.lo \
- H5Pdxpl.lo H5Pfapl.lo H5Pfcpl.lo H5Ptest.lo H5R.lo H5RC.lo \
- H5RS.lo H5S.lo H5Sall.lo H5Shyper.lo H5Smpio.lo H5Snone.lo \
- H5Spoint.lo H5Sselect.lo H5Stest.lo H5SL.lo H5ST.lo H5T.lo \
- H5Tarray.lo H5Tbit.lo H5Tcommit.lo H5Tcompound.lo H5Tconv.lo \
- H5Tcset.lo H5Tenum.lo H5Tfields.lo H5Tfixed.lo H5Tfloat.lo \
- H5Tinit.lo H5Tnative.lo H5Toffset.lo H5Topaque.lo H5Torder.lo \
- H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo H5Tvlen.lo H5TS.lo H5V.lo \
- H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo H5Znbit.lo H5Zshuffle.lo \
- H5Zszip.lo H5Ztrans.lo
+am_libhdf5_la_OBJECTS = H5.lo H5A.lo H5AC.lo H5B.lo H5B2.lo H5B2dbg.lo \
+ H5C.lo H5D.lo H5Dcontig.lo H5Dcompact.lo H5Defl.lo H5Dio.lo \
+ H5Distore.lo H5Dmpio.lo H5Dselect.lo H5Dtest.lo H5E.lo H5F.lo \
+ H5Fdbg.lo H5FD.lo H5FDcore.lo H5FDfamily.lo H5FDfphdf5.lo \
+ H5FDgass.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo H5FDmpiposix.lo \
+ H5FDmulti.lo H5FDsec2.lo H5FDsrb.lo H5FDstdio.lo H5FDstream.lo \
+ H5FL.lo H5FO.lo H5FP.lo H5FPclient.lo H5FPserver.lo H5FS.lo \
+ H5G.lo H5Gent.lo H5Gnode.lo H5Gstab.lo H5HG.lo H5HGdbg.lo \
+ H5HL.lo H5HLdbg.lo H5HP.lo H5I.lo H5MF.lo H5MM.lo H5O.lo \
+ H5Oattr.lo H5Obogus.lo H5Ocont.lo H5Odtype.lo H5Oefl.lo \
+ H5Ofill.lo H5Olayout.lo H5Omtime.lo H5Oname.lo H5Onull.lo \
+ H5Opline.lo H5Osdspace.lo H5Oshared.lo H5Ostab.lo H5P.lo \
+ H5Pdcpl.lo H5Pdxpl.lo H5Pfapl.lo H5Pfcpl.lo H5Ptest.lo H5R.lo \
+ H5RC.lo H5RS.lo H5S.lo H5Sall.lo H5Shyper.lo H5Smpio.lo \
+ H5Snone.lo H5Spoint.lo H5Sselect.lo H5Stest.lo H5SL.lo H5ST.lo \
+ H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo H5Tcompound.lo \
+ H5Tconv.lo H5Tcset.lo H5Tenum.lo H5Tfields.lo H5Tfixed.lo \
+ H5Tfloat.lo H5Tinit.lo H5Tnative.lo H5Toffset.lo H5Topaque.lo \
+ H5Torder.lo H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo H5Tvlen.lo \
+ H5TS.lo H5V.lo H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo H5Znbit.lo \
+ H5Zshuffle.lo H5Zszip.lo H5Ztrans.lo
libhdf5_la_OBJECTS = $(am_libhdf5_la_OBJECTS)
noinst_PROGRAMS = H5detect$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
@@ -323,6 +327,7 @@ depcomp = $(SHELL) $(top_srcdir)/bin/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/H5.Plo ./$(DEPDIR)/H5A.Plo \
@AMDEP_TRUE@ ./$(DEPDIR)/H5AC.Plo ./$(DEPDIR)/H5B.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/H5B2.Plo ./$(DEPDIR)/H5B2dbg.Plo \
@AMDEP_TRUE@ ./$(DEPDIR)/H5C.Plo ./$(DEPDIR)/H5D.Plo \
@AMDEP_TRUE@ ./$(DEPDIR)/H5Dcompact.Plo \
@AMDEP_TRUE@ ./$(DEPDIR)/H5Dcontig.Plo ./$(DEPDIR)/H5Defl.Plo \
@@ -405,7 +410,7 @@ all: H5config.h
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign src/Makefile
+ $(AUTOMAKE) --gnu src/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
@@ -478,6 +483,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5A.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5AC.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5B.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5B2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5B2dbg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5C.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5D.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Dcompact.Plo@am__quote@
diff --git a/test/Makefile.am b/test/Makefile.am
index 289abc9..0a1a243 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -28,11 +28,12 @@ check_SCRIPTS = $(TEST_SCRIPT)
# These are our main targets. They should be listed in the order to be
# executed, generally most specific tests to least specific tests.
-TEST_PROG=testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests \
+TEST_PROG=testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests \
dtypes dsets cmpd_dset extend external links unlink big mtime \
fillval mount flush1 flush2 enum gass_write gass_read gass_append \
set_extent srb_write srb_append srb_read ttsafe stream_test \
- getname file_handle ntypes dangle dtransform filename reserved
+ getname file_handle ntypes dangle dtransform filename reserved \
+ btree2
# List programs to be built when testing here. error_test and err_compat are
# built at the same time as the other tests, but executed by testerror.sh.
@@ -87,7 +88,7 @@ MOSTLYCLEANFILES=cmpd_dset.h5 compact_dataset.h5 dataset.h5 extend.h5 istore.h5\
family_file000[0-3][0-9].h5 multi_file-[rs].h5 core_file \
new_move_[ab].h5 ntypes.h5 dangle.h5 error_test.h5 err_compat.h5 \
dtransform.h5 test_filters.h5 get_file_name.h5 tstint[1-2].h5 \
- unlink_chunked.h5
+ unlink_chunked.h5 btree2.h5
# Sources for testhdf5 executable
testhdf5_SOURCES=testhdf5.c tarray.c tattr.c tconfig.c tfile.c tgenprop.c \
diff --git a/test/Makefile.in b/test/Makefile.in
index 002b068..299cd79 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -208,11 +208,12 @@ check_SCRIPTS = $(TEST_SCRIPT)
# These are our main targets. They should be listed in the order to be
# executed, generally most specific tests to least specific tests.
-TEST_PROG = testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests \
+TEST_PROG = testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests \
dtypes dsets cmpd_dset extend external links unlink big mtime \
fillval mount flush1 flush2 enum gass_write gass_read gass_append \
set_extent srb_write srb_append srb_read ttsafe stream_test \
- getname file_handle ntypes dangle dtransform filename reserved
+ getname file_handle ntypes dangle dtransform filename reserved \
+ btree2
# List programs to be built when testing here. error_test and err_compat are
@@ -258,7 +259,7 @@ MOSTLYCLEANFILES = cmpd_dset.h5 compact_dataset.h5 dataset.h5 extend.h5 istore.h
family_file000[0-3][0-9].h5 multi_file-[rs].h5 core_file \
new_move_[ab].h5 ntypes.h5 dangle.h5 error_test.h5 err_compat.h5 \
dtransform.h5 test_filters.h5 get_file_name.h5 tstint[1-2].h5 \
- unlink_chunked.h5
+ unlink_chunked.h5 btree2.h5
# Sources for testhdf5 executable
@@ -298,7 +299,8 @@ check_PROGRAMS = testhdf5$(EXEEXT) lheap$(EXEEXT) ohdr$(EXEEXT) \
ttsafe$(EXEEXT) stream_test$(EXEEXT) getname$(EXEEXT) \
file_handle$(EXEEXT) ntypes$(EXEEXT) dangle$(EXEEXT) \
dtransform$(EXEEXT) filename$(EXEEXT) reserved$(EXEEXT) \
- error_test$(EXEEXT) err_compat$(EXEEXT) testmeta$(EXEEXT)
+ btree2$(EXEEXT) error_test$(EXEEXT) err_compat$(EXEEXT) \
+ testmeta$(EXEEXT)
big_SOURCES = big.c
big_OBJECTS = big.$(OBJEXT)
big_LDADD = $(LDADD)
@@ -309,6 +311,11 @@ bittests_OBJECTS = bittests.$(OBJEXT)
bittests_LDADD = $(LDADD)
bittests_DEPENDENCIES = $(top_builddir)/src/libhdf5.la libh5test.la
bittests_LDFLAGS =
+btree2_SOURCES = btree2.c
+btree2_OBJECTS = btree2.$(OBJEXT)
+btree2_LDADD = $(LDADD)
+btree2_DEPENDENCIES = $(top_builddir)/src/libhdf5.la libh5test.la
+btree2_LDFLAGS =
cache_SOURCES = cache.c
cache_OBJECTS = cache.$(OBJEXT)
cache_LDADD = $(LDADD)
@@ -525,35 +532,36 @@ LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/bin/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/big.Po ./$(DEPDIR)/bittests.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/cache.Po ./$(DEPDIR)/cmpd_dset.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/dangle.Po ./$(DEPDIR)/dsets.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/dtransform.Po ./$(DEPDIR)/dtypes.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/enum.Po ./$(DEPDIR)/err_compat.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/error_test.Po ./$(DEPDIR)/extend.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/external.Po ./$(DEPDIR)/file_handle.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/filename.Po ./$(DEPDIR)/fillval.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/flush1.Po ./$(DEPDIR)/flush2.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/gass_append.Po ./$(DEPDIR)/gass_read.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/gass_write.Po ./$(DEPDIR)/getname.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/gheap.Po ./$(DEPDIR)/h5test.Plo \
-@AMDEP_TRUE@ ./$(DEPDIR)/hyperslab.Po ./$(DEPDIR)/istore.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/lheap.Po ./$(DEPDIR)/links.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/mount.Po ./$(DEPDIR)/mtime.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/ntypes.Po ./$(DEPDIR)/ohdr.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/reserved.Po ./$(DEPDIR)/set_extent.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/srb_append.Po ./$(DEPDIR)/srb_read.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/srb_write.Po ./$(DEPDIR)/stab.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/stream_test.Po ./$(DEPDIR)/tarray.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/tattr.Po ./$(DEPDIR)/tconfig.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/testframe.Plo ./$(DEPDIR)/testhdf5.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/testmeta.Po ./$(DEPDIR)/tfile.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/tgenprop.Po ./$(DEPDIR)/th5s.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/theap.Po ./$(DEPDIR)/tid.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/titerate.Po ./$(DEPDIR)/tmeta.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/tmisc.Po ./$(DEPDIR)/trefer.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/trefstr.Po ./$(DEPDIR)/tselect.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/tskiplist.Po ./$(DEPDIR)/ttime.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/ttsafe.Po ./$(DEPDIR)/ttsafe_acreate.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/btree2.Po ./$(DEPDIR)/cache.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/cmpd_dset.Po ./$(DEPDIR)/dangle.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/dsets.Po ./$(DEPDIR)/dtransform.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/dtypes.Po ./$(DEPDIR)/enum.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/err_compat.Po ./$(DEPDIR)/error_test.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/extend.Po ./$(DEPDIR)/external.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/file_handle.Po ./$(DEPDIR)/filename.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/fillval.Po ./$(DEPDIR)/flush1.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/flush2.Po ./$(DEPDIR)/gass_append.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/gass_read.Po ./$(DEPDIR)/gass_write.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/getname.Po ./$(DEPDIR)/gheap.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/h5test.Plo ./$(DEPDIR)/hyperslab.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/istore.Po ./$(DEPDIR)/lheap.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/links.Po ./$(DEPDIR)/mount.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/mtime.Po ./$(DEPDIR)/ntypes.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/ohdr.Po ./$(DEPDIR)/reserved.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/set_extent.Po ./$(DEPDIR)/srb_append.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/srb_read.Po ./$(DEPDIR)/srb_write.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/stab.Po ./$(DEPDIR)/stream_test.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tarray.Po ./$(DEPDIR)/tattr.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tconfig.Po ./$(DEPDIR)/testframe.Plo \
+@AMDEP_TRUE@ ./$(DEPDIR)/testhdf5.Po ./$(DEPDIR)/testmeta.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tfile.Po ./$(DEPDIR)/tgenprop.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/th5s.Po ./$(DEPDIR)/theap.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tid.Po ./$(DEPDIR)/titerate.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tmeta.Po ./$(DEPDIR)/tmisc.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/trefer.Po ./$(DEPDIR)/trefstr.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/tselect.Po ./$(DEPDIR)/tskiplist.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/ttime.Po ./$(DEPDIR)/ttsafe.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/ttsafe_acreate.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ttsafe_cancel.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ttsafe_dcreate.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ttsafe_error.Po ./$(DEPDIR)/ttst.Po \
@@ -567,7 +575,7 @@ CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
-DIST_SOURCES = $(libh5test_la_SOURCES) big.c bittests.c cache.c \
+DIST_SOURCES = $(libh5test_la_SOURCES) big.c bittests.c btree2.c cache.c \
cmpd_dset.c dangle.c dsets.c dtransform.c dtypes.c enum.c \
err_compat.c error_test.c extend.c external.c file_handle.c \
filename.c fillval.c flush1.c flush2.c gass_append.c \
@@ -577,7 +585,7 @@ DIST_SOURCES = $(libh5test_la_SOURCES) big.c bittests.c cache.c \
stream_test.c $(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) \
unlink.c
DIST_COMMON = Makefile.am Makefile.in
-SOURCES = $(libh5test_la_SOURCES) big.c bittests.c cache.c cmpd_dset.c dangle.c dsets.c dtransform.c dtypes.c enum.c err_compat.c error_test.c extend.c external.c file_handle.c filename.c fillval.c flush1.c flush2.c gass_append.c gass_read.c gass_write.c getname.c gheap.c hyperslab.c istore.c lheap.c links.c mount.c mtime.c ntypes.c ohdr.c reserved.c set_extent.c srb_append.c srb_read.c srb_write.c stab.c stream_test.c $(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) unlink.c
+SOURCES = $(libh5test_la_SOURCES) big.c bittests.c btree2.c cache.c cmpd_dset.c dangle.c dsets.c dtransform.c dtypes.c enum.c err_compat.c error_test.c extend.c external.c file_handle.c filename.c fillval.c flush1.c flush2.c gass_append.c gass_read.c gass_write.c getname.c gheap.c hyperslab.c istore.c lheap.c links.c mount.c mtime.c ntypes.c ohdr.c reserved.c set_extent.c srb_append.c srb_read.c srb_write.c stab.c stream_test.c $(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) unlink.c
all: all-am
@@ -585,7 +593,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign test/Makefile
+ $(AUTOMAKE) --gnu test/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
@@ -612,6 +620,9 @@ big$(EXEEXT): $(big_OBJECTS) $(big_DEPENDENCIES)
bittests$(EXEEXT): $(bittests_OBJECTS) $(bittests_DEPENDENCIES)
@rm -f bittests$(EXEEXT)
$(LINK) $(bittests_LDFLAGS) $(bittests_OBJECTS) $(bittests_LDADD) $(LIBS)
+btree2$(EXEEXT): $(btree2_OBJECTS) $(btree2_DEPENDENCIES)
+ @rm -f btree2$(EXEEXT)
+ $(LINK) $(btree2_LDFLAGS) $(btree2_OBJECTS) $(btree2_LDADD) $(LIBS)
cache$(EXEEXT): $(cache_OBJECTS) $(cache_DEPENDENCIES)
@rm -f cache$(EXEEXT)
$(LINK) $(cache_LDFLAGS) $(cache_OBJECTS) $(cache_LDADD) $(LIBS)
@@ -741,6 +752,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/big.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bittests.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btree2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmpd_dset.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dangle.Po@am__quote@
diff --git a/test/btree2.c b/test/btree2.c
new file mode 100644
index 0000000..182c4fa
--- /dev/null
+++ b/test/btree2.c
@@ -0,0 +1,271 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
+ * Tuesday, February 1, 2005
+ */
+#include "h5test.h"
+
+/*
+ * This file needs to access private datatypes from the H5B2 package.
+ */
+#define H5B2_PACKAGE
+#include "H5B2pkg.h"
+
+/* Other private headers that this test requires */
+#include "H5Iprivate.h"
+
+const char *FILENAME[] = {
+ "btree2",
+ NULL
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function: store
+ *
+ * Purpose: Store native information into record for B-tree
+ *
+ * Return: Success: non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, February 3, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+store(const H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *udata, void *nrecord)
+{
+ *(hsize_t *)nrecord=*(const hsize_t *)udata;
+
+#ifdef QAK
+HDfprintf(stderr,"store: udata=%Hu\n",*(const hsize_t *)udata);
+#endif /* QAK */
+ return(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: compare
+ *
+ * Purpose: Compare two native information records, according to some key
+ *
+ * Return: <0 if rec1 < rec2
+ * =0 if rec1 == rec2
+ * >0 if rec1 > rec2
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, February 3, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+compare(const H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *rec1, const void *rec2)
+{
+#ifdef QAK
+HDfprintf(stderr,"compare: *rec1=%Hu, *rec2=%Hu\n",*(const hsize_t *)rec1,*(const hsize_t *)rec2);
+#endif /* QAK */
+ return(*(const hssize_t *)rec1-*(const hssize_t *)rec2);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: encode
+ *
+ * Purpose: Encode native information into raw form for storing on disk
+ *
+ * Return: Success: non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, February 3, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+encode(const H5F_t *f, uint8_t *raw, const void *nrecord)
+{
+ H5F_ENCODE_LENGTH(f, raw, *(const hsize_t *)nrecord);
+
+#ifdef QAK
+HDfprintf(stderr,"encode: data=%Hu\n",*(const hsize_t *)nrecord);
+#endif /* QAK */
+ return(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_basic
+ *
+ * Purpose: Basic tests for the B-tree v2 code
+ *
+ * Return: Success: 0
+ *
+ * Failure: 1
+ *
+ * Programmer: Quincey Koziol
+ * Thursday, February 3, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_basic_insert(hid_t fapl)
+{
+ hid_t file=-1;
+ char filename[1024];
+ H5F_t *f=NULL;
+ H5B2_class_t type={ /* B-tree class information */
+ 0, /* Type of B-tree */
+ sizeof(hsize_t), /* Size of native key */
+ store, /* Record storage callback */
+ compare, /* Record comparison callback */
+ encode /* Record encoding callback */
+ };
+ hsize_t record; /* Record to insert into tree */
+ haddr_t bt2_addr; /* Address of B-tree created */
+
+ h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+ /* Create the file to work on */
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+ /* Get a pointer to the internal file object */
+ if (NULL==(f=H5I_object(file))) {
+ H5Eprint_stack(H5E_DEFAULT, stdout);
+ TEST_ERROR;
+ }
+
+ /*
+ * Test v2 B-tree creation
+ */
+ TESTING("B-tree creation");
+ if (H5B2_create(f, H5P_DATASET_XFER_DEFAULT, &type, 512, 8, 100, 40, &bt2_addr/*out*/)<0) {
+ H5_FAILED();
+ H5Eprint_stack(H5E_DEFAULT, stdout);
+ TEST_ERROR;
+ }
+ PASSED();
+
+ /*
+ * Test inserting record into v2 B-tree
+ */
+ TESTING("B-tree insert");
+ record=42;
+ if (H5B2_insert(f, H5P_DATASET_XFER_DEFAULT, &type, bt2_addr, &record)<0) {
+ H5_FAILED();
+ H5Eprint_stack(H5E_DEFAULT, stdout);
+ TEST_ERROR;
+ }
+
+ /*
+ * Test inserting second record into v2 B-tree, before all other records
+ */
+ record=34;
+ if (H5B2_insert(f, H5P_DATASET_XFER_DEFAULT, &type, bt2_addr, &record)<0) {
+ H5_FAILED();
+ H5Eprint_stack(H5E_DEFAULT, stdout);
+ TEST_ERROR;
+ }
+
+ /*
+ * Test inserting third record into v2 B-tree, after all other records
+ */
+ record=56;
+ if (H5B2_insert(f, H5P_DATASET_XFER_DEFAULT, &type, bt2_addr, &record)<0) {
+ H5_FAILED();
+ H5Eprint_stack(H5E_DEFAULT, stdout);
+ TEST_ERROR;
+ }
+
+ /*
+ * Test inserting fourth record into v2 B-tree, in the middle of other records
+ */
+ record=38;
+ if (H5B2_insert(f, H5P_DATASET_XFER_DEFAULT, &type, bt2_addr, &record)<0) {
+ H5_FAILED();
+ H5Eprint_stack(H5E_DEFAULT, stdout);
+ TEST_ERROR;
+ }
+ PASSED();
+
+ if (H5Fclose(file)<0) TEST_ERROR;
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Fclose(file);
+ } H5E_END_TRY;
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: Test the B-tree v2 code
+ *
+ * Return: Success:
+ *
+ * Failure:
+ *
+ * Programmer: Quincey Koziol
+ * Tuesday, February 1, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+ hid_t fapl=-1;
+ int nerrors=0;
+
+ /* Reset library */
+ h5_reset();
+ fapl = h5_fileaccess();
+
+ /* Test basic B-tree insertion */
+ nerrors += test_basic_insert(fapl);
+/* nerrors += test_many_insert(fapl); */
+
+ if (nerrors) goto error;
+ puts("All v2 B-tree tests passed.");
+#ifndef QAK
+ h5_cleanup(FILENAME, fapl);
+#else /* QAK */
+HDfprintf(stderr,"Uncomment cleanup!\n");
+#endif /* QAK */
+ return 0;
+
+error:
+ puts("*** TESTS FAILED ***");
+ H5E_BEGIN_TRY {
+ H5Pclose(fapl);
+ } H5E_END_TRY;
+ return 1;
+}
+
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index e7ab3e9..cf169fa 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -291,7 +291,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign testpar/Makefile
+ $(AUTOMAKE) --gnu testpar/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
testph5.sh: $(top_builddir)/config.status testph5.sh.in
diff --git a/tools/Makefile.in b/tools/Makefile.in
index cab7823..a273c2a 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -232,7 +232,7 @@ all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/Makefile
+ $(AUTOMAKE) --gnu tools/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/tools/gifconv/Makefile.in b/tools/gifconv/Makefile.in
index 884b7ba..0d58f52 100644
--- a/tools/gifconv/Makefile.in
+++ b/tools/gifconv/Makefile.in
@@ -274,7 +274,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/gifconv/Makefile
+ $(AUTOMAKE) --gnu tools/gifconv/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in
index 1fb5b22..d915684 100644
--- a/tools/h5diff/Makefile.in
+++ b/tools/h5diff/Makefile.in
@@ -291,7 +291,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/h5diff/Makefile
+ $(AUTOMAKE) --gnu tools/h5diff/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in
index dea8a1a..92f2647 100644
--- a/tools/h5dump/Makefile.in
+++ b/tools/h5dump/Makefile.in
@@ -280,7 +280,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/h5dump/Makefile
+ $(AUTOMAKE) --gnu tools/h5dump/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
testh5dump.sh: $(top_builddir)/config.status testh5dump.sh.in
diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in
index cebd50d..50b50cc 100755
--- a/tools/h5import/Makefile.in
+++ b/tools/h5import/Makefile.in
@@ -275,7 +275,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/h5import/Makefile
+ $(AUTOMAKE) --gnu tools/h5import/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in
index 7cb049f..38ae399 100644
--- a/tools/h5jam/Makefile.in
+++ b/tools/h5jam/Makefile.in
@@ -293,7 +293,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/h5jam/Makefile
+ $(AUTOMAKE) --gnu tools/h5jam/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
testh5jam.sh: $(top_builddir)/config.status testh5jam.sh.in
diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in
index 4b3ba28..8510e7c 100644
--- a/tools/h5ls/Makefile.in
+++ b/tools/h5ls/Makefile.in
@@ -264,7 +264,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/h5ls/Makefile
+ $(AUTOMAKE) --gnu tools/h5ls/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in
index 5da78ff..50d03c1 100644
--- a/tools/h5repack/Makefile.in
+++ b/tools/h5repack/Makefile.in
@@ -324,7 +324,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/h5repack/Makefile
+ $(AUTOMAKE) --gnu tools/h5repack/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
h5repack.sh: $(top_builddir)/config.status h5repack.sh.in
diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in
index 5be44e4..3c6f426 100644
--- a/tools/lib/Makefile.in
+++ b/tools/lib/Makefile.in
@@ -290,7 +290,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/lib/Makefile
+ $(AUTOMAKE) --gnu tools/lib/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in
index 3362269..f76b769 100644
--- a/tools/misc/Makefile.in
+++ b/tools/misc/Makefile.in
@@ -294,7 +294,7 @@ all: all-am
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
- $(AUTOMAKE) --foreign tools/misc/Makefile
+ $(AUTOMAKE) --gnu tools/misc/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
h5cc: $(top_builddir)/config.status h5cc.in
diff --git a/tools/misc/h5debug.c b/tools/misc/h5debug.c
index 466279c..88dc861 100644
--- a/tools/misc/h5debug.c
+++ b/tools/misc/h5debug.c
@@ -26,9 +26,11 @@
*/
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
#define H5O_PACKAGE /*suppress error about including H5Opkg */
+#define H5B2_PACKAGE /*suppress error about including H5B2pkg */
-#include "H5private.h"
+#include "H5private.h" /* Generic Functions */
#include "H5Bprivate.h"
+#include "H5B2pkg.h" /* B-trees */
#include "H5Dprivate.h"
#include "H5Fpkg.h"
#include "H5Gprivate.h"
@@ -75,7 +77,7 @@ main(int argc, char *argv[])
if (argc == 1) {
fprintf(stderr,
- "Usage: %s filename [signature addr [extra]]\n", argv[0]);
+ "Usage: %s filename [signature-addr [extra]]\n", argv[0]);
HDexit(1);
}
@@ -173,6 +175,36 @@ main(int argc, char *argv[])
HDexit(4);
}
+ } else if (!HDmemcmp(sig, H5B2_HDR_MAGIC, H5B2_SIZEOF_MAGIC)) {
+ /*
+ * Debug a v2 B-tree. B-trees are debugged through the B-tree
+ * subclass. The subclass identifier is two bytes after the
+ * B-tree signature.
+ */
+ H5B2_subid_t subtype = (H5B_subid_t)sig[H5B2_SIZEOF_MAGIC+1];
+
+#ifdef NOT_YET
+ switch (subtype) {
+ case H5B_SNODE_ID:
+ status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
+ break;
+
+ case H5B_ISTORE_ID:
+ ndims = (unsigned)extra;
+ status = H5D_istore_debug (f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, ndims);
+ break;
+
+ default:
+ fprintf(stderr, "Unknown B-tree subtype %u\n", (unsigned)(subtype));
+ HDexit(4);
+ }
+#else /* NOT_YET */
+H5B2_class_t type={0,sizeof(hsize_t),NULL,NULL,NULL}; /* B-tree class information */
+
+fprintf(stderr,"B-tree subtype=%u\n",(unsigned)subtype);
+ status = H5B2_hdr_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, &type);
+#endif /* NOT_YET */
+
} else if (sig[0] == H5O_VERSION) {
/*
* This could be an object header. Since they don't have a signature