Commit 19e38349 authored by Andy Cedilnik's avatar Andy Cedilnik
Browse files

Copy from paraview

parent f9567ad3
This diff is collapsed.
This diff is collapsed.
......@@ -24,13 +24,13 @@
*-------------------------------------------------------------------------
*/
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
#include "H5private.h"
#include "H5ACprivate.h"
#include "H5Eprivate.h"
#include "H5Fpkg.h"
#include "H5FLprivate.h" /*Free Lists */
#include "H5FLprivate.h" /*Free Lists */
#include "H5MMprivate.h"
/*
......@@ -96,8 +96,8 @@ H5AC_create(H5F_t *f, int size_hint)
if (size_hint < 1) size_hint = H5AC_NSLOTS;
if (NULL==(f->shared->cache = cache = H5FL_ALLOC(H5AC_t,1))) {
HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,
"memory allocation failed");
HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,
"memory allocation failed");
}
cache->nslots = size_hint;
cache->slot = H5FL_ARR_ALLOC(H5AC_info_ptr_t,(hsize_t)cache->nslots,1);
......@@ -205,14 +205,14 @@ H5AC_dest(H5F_t *f)
* Keeps track of hits, misses, and flushes per object type so we have
* some cache performance diagnostics.
*
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
*
*-------------------------------------------------------------------------
*/
void *
H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2)
const void *udata1, void *udata2)
{
unsigned idx;
herr_t status;
......@@ -384,8 +384,8 @@ H5AC_compare(const void *_a, const void *_b)
* Jul 9 1997
*
* Modifications:
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
*-------------------------------------------------------------------------
*/
herr_t
......@@ -416,7 +416,7 @@ H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
*/
if (NULL==(map=H5FL_ARR_ALLOC(int,(hsize_t)cache->nslots,0))) {
HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,
"memory allocation failed");
"memory allocation failed");
}
for (i = nslots = 0; i < cache->nslots; i++) {
if (cache->slot[i]!=NULL)
......@@ -489,7 +489,7 @@ H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
*/
flush = cache->slot[i]->type->flush;
status = (flush)(f, destroy, cache->slot[i]->addr,
cache->slot[i]);
cache->slot[i]);
if (status < 0) {
HRETURN_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL,
"unable to flush object");
......@@ -520,8 +520,8 @@ H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
* Jul 9 1997
*
* Modifications:
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
*-------------------------------------------------------------------------
*/
herr_t
......@@ -594,13 +594,13 @@ H5AC_set(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
* Jul 9 1997
*
* Modifications:
* Robb Matzke, 1999-07-27
* The OLD_ADDR and NEW_ADDR arguments are passed by value.
* Robb Matzke, 1999-07-27
* The OLD_ADDR and NEW_ADDR arguments are passed by value.
*-------------------------------------------------------------------------
*/
herr_t
H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
haddr_t new_addr)
haddr_t new_addr)
{
unsigned old_idx, new_idx;
H5AC_flush_func_t flush=NULL;
......@@ -652,7 +652,7 @@ H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
flush = cache->slot[new_idx]->type->flush;
status = (flush)(f, TRUE, cache->slot[new_idx]->addr,
cache->slot[new_idx]);
cache->slot[new_idx]);
if (status < 0) {
HRETURN_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL,
"unable to flush object");
......@@ -693,13 +693,13 @@ H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
* Sep 2 1997
*
* Modifications:
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
*-------------------------------------------------------------------------
*/
void *
H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2)
const void *udata1, void *udata2)
{
int idx;
void *thing = NULL;
......@@ -711,9 +711,9 @@ H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
static int ncalls = 0;
if (0 == ncalls++) {
if (H5DEBUG(AC)) {
fprintf(H5DEBUG(AC), "H5AC: debugging cache (expensive)\n");
}
if (H5DEBUG(AC)) {
fprintf(H5DEBUG(AC), "H5AC: debugging cache (expensive)\n");
}
}
#endif
......@@ -820,8 +820,8 @@ H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
* Sep 2 1997
*
* Modifications:
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
* Robb Matzke, 1999-07-27
* The ADDR argument is passed by value.
*-------------------------------------------------------------------------
*/
herr_t
......@@ -924,59 +924,60 @@ H5AC_debug(H5F_t UNUSED *f)
#ifdef H5AC_DEBUG
if (H5DEBUG(AC)) {
fprintf(H5DEBUG(AC), "H5AC: meta data cache statistics for file %s\n",
f->name);
fprintf(H5DEBUG(AC), " %-18s %8s %8s %8s %8s+%-8s\n",
"Layer", "Hits", "Misses", "MissRate", "Inits", "Flushes");
fprintf(H5DEBUG(AC), " %-18s %8s %8s %8s %8s-%-8s\n",
"-----", "----", "------", "--------", "-----", "-------");
for (i = H5AC_BT_ID; i < H5AC_NTYPES; i++) {
switch (i) {
case H5AC_BT_ID:
HDstrcpy(s, "B-tree nodes");
break;
case H5AC_SNODE_ID:
HDstrcpy(s, "symbol table nodes");
break;
case H5AC_LHEAP_ID:
HDstrcpy (s, "local heaps");
break;
case H5AC_GHEAP_ID:
HDstrcpy (s, "global heaps");
break;
case H5AC_OHDR_ID:
HDstrcpy(s, "object headers");
break;
default:
sprintf(s, "unknown id %d", i);
}
if (cache->diagnostics[i].nhits>0 ||
cache->diagnostics[i].nmisses>0) {
miss_rate = 100.0 * cache->diagnostics[i].nmisses /
(cache->diagnostics[i].nhits+
cache->diagnostics[i].nmisses);
} else {
miss_rate = 0.0;
}
if (miss_rate > 100) {
sprintf(ascii, "%7d%%", (int) (miss_rate + 0.5));
} else {
sprintf(ascii, "%7.2f%%", miss_rate);
}
fprintf(H5DEBUG(AC), " %-18s %8u %8u %7s %8u%+-9ld\n", s,
cache->diagnostics[i].nhits,
cache->diagnostics[i].nmisses,
ascii,
cache->diagnostics[i].ninits,
((long)(cache->diagnostics[i].nflushes) -
(long)(cache->diagnostics[i].ninits)));
}
fprintf(H5DEBUG(AC), "H5AC: meta data cache statistics for file %s\n",
f->name);
fprintf(H5DEBUG(AC), " %-18s %8s %8s %8s %8s+%-8s\n",
"Layer", "Hits", "Misses", "MissRate", "Inits", "Flushes");
fprintf(H5DEBUG(AC), " %-18s %8s %8s %8s %8s-%-8s\n",
"-----", "----", "------", "--------", "-----", "-------");
for (i = H5AC_BT_ID; i < H5AC_NTYPES; i++) {
switch (i) {
case H5AC_BT_ID:
HDstrcpy(s, "B-tree nodes");
break;
case H5AC_SNODE_ID:
HDstrcpy(s, "symbol table nodes");
break;
case H5AC_LHEAP_ID:
HDstrcpy (s, "local heaps");
break;
case H5AC_GHEAP_ID:
HDstrcpy (s, "global heaps");
break;
case H5AC_OHDR_ID:
HDstrcpy(s, "object headers");
break;
default:
sprintf(s, "unknown id %d", i);
}
if (cache->diagnostics[i].nhits>0 ||
cache->diagnostics[i].nmisses>0) {
miss_rate = 100.0 * cache->diagnostics[i].nmisses /
(cache->diagnostics[i].nhits+
cache->diagnostics[i].nmisses);
} else {
miss_rate = 0.0;
}
if (miss_rate > 100) {
sprintf(ascii, "%7d%%", (int) (miss_rate + 0.5));
} else {
sprintf(ascii, "%7.2f%%", miss_rate);
}
fprintf(H5DEBUG(AC), " %-18s %8u %8u %7s %8u%+-9ld\n", s,
cache->diagnostics[i].nhits,
cache->diagnostics[i].nmisses,
ascii,
cache->diagnostics[i].ninits,
((long)(cache->diagnostics[i].nflushes) -
(long)(cache->diagnostics[i].ninits)));
}
}
#endif
FUNC_LEAVE(SUCCEED);
f = 0;
}
/*-------------------------------------------------------------------------
* Copyright (C) 1997 National Center for Supercomputing Applications.
* All rights reserved.
* Copyright (C) 1997 National Center for Supercomputing Applications.
* All rights reserved.
*
*-------------------------------------------------------------------------
*
* Created: H5ACprivate.h
* Jul 9 1997
* Robb Matzke <matzke@llnl.gov>
* Created: H5ACprivate.h
* Jul 9 1997
* Robb Matzke <matzke@llnl.gov>
*
* Purpose: Constants and typedefs available to the rest of the
* library.
* Purpose: Constants and typedefs available to the rest of the
* library.
*
* Modifications:
*
......@@ -18,7 +18,7 @@
#ifndef _H5ACprivate_H
#define _H5ACprivate_H
#include "H5ACpublic.h" /*public prototypes */
#include "H5ACpublic.h" /*public prototypes */
/* Pivate headers needed by this header */
#include "H5private.h"
......@@ -26,43 +26,43 @@
/*
* Feature: Define H5AC_DEBUG on the compiler command line if you want to
* debug H5AC_protect() and H5AC_unprotect() by insuring that
* nothing accesses protected objects. NDEBUG must not be defined
* in order for this to have any effect.
* debug H5AC_protect() and H5AC_unprotect() by insuring that
* nothing accesses protected objects. NDEBUG must not be defined
* in order for this to have any effect.
*/
#ifdef NDEBUG
# undef H5AC_DEBUG
#endif
/*
* Class methods pertaining to caching. Each type of cached object will
* Class methods pertaining to caching. Each type of cached object will
* have a constant variable with permanent life-span that describes how
* to cache the object. That variable will be of type H5AC_class_t and
* to cache the object. That variable will be of type H5AC_class_t and
* have the following required fields...
*
* LOAD: Loads an object from disk to memory. The function
* should allocate some data structure and return it.
* LOAD: Loads an object from disk to memory. The function
* should allocate some data structure and return it.
*
* FLUSH: Writes some data structure back to disk. It would be
* wise for the data structure to include dirty flags to
* indicate whether it really needs to be written. This
* function is also responsible for freeing memory allocated
* by the LOAD method if the DEST argument is non-zero.
* FLUSH: Writes some data structure back to disk. It would be
* wise for the data structure to include dirty flags to
* indicate whether it really needs to be written. This
* function is also responsible for freeing memory allocated
* by the LOAD method if the DEST argument is non-zero.
*/
typedef enum H5AC_subid_t {
H5AC_BT_ID = 0, /*B-tree nodes */
H5AC_SNODE_ID = 1, /*symbol table nodes */
H5AC_LHEAP_ID = 2, /*local heap */
H5AC_GHEAP_ID = 3, /*global heap */
H5AC_OHDR_ID = 4, /*object header */
H5AC_NTYPES = 5 /*THIS MUST BE LAST! */
H5AC_BT_ID = 0, /*B-tree nodes */
H5AC_SNODE_ID = 1, /*symbol table nodes */
H5AC_LHEAP_ID = 2, /*local heap */
H5AC_GHEAP_ID = 3, /*global heap */
H5AC_OHDR_ID = 4, /*object header */
H5AC_NTYPES = 5 /*THIS MUST BE LAST! */
} H5AC_subid_t;
typedef void *(*H5AC_load_func_t)(H5F_t*, haddr_t addr, const void *udata1, void *udata2);
typedef herr_t (*H5AC_flush_func_t)(H5F_t*, hbool_t dest, haddr_t addr, void *thing);
typedef struct H5AC_class_t {
H5AC_subid_t id;
H5AC_subid_t id;
H5AC_load_func_t load;
H5AC_flush_func_t flush;
} H5AC_class_t;
......@@ -72,39 +72,39 @@ typedef struct H5AC_class_t {
* cache entry by hashing the object's file address. Each file has its
* own cache, an array of slots.
*/
#define H5AC_NSLOTS 10330 /* The library "likes" this number... */
#define H5AC_NSLOTS 10330 /* The library "likes" this number... */
#define H5AC_HASH_DIVISOR 8 /* Attempt to spread out the hashing */
/* This should be the same size as the alignment of */
/* of the smallest file format object written to the file. */
#define H5AC_HASH(F,ADDR) H5F_addr_hash((ADDR/H5AC_HASH_DIVISOR),(F)->shared->cache->nslots)
typedef struct H5AC_info_t {
const H5AC_class_t *type; /*type of object stored here */
haddr_t addr; /*file address for object */
const H5AC_class_t *type; /*type of object stored here */
haddr_t addr; /*file address for object */
} H5AC_info_t;
typedef H5AC_info_t *H5AC_info_ptr_t; /* Typedef for free lists */
#ifdef H5AC_DEBUG
typedef struct H5AC_prot_t {
int nprots; /*number of things protected */
int aprots; /*nelmts of `prot' array */
H5AC_info_t **slot; /*array of pointers to protected things */
int nprots; /*number of things protected */
int aprots; /*nelmts of `prot' array */
H5AC_info_t **slot; /*array of pointers to protected things */
} H5AC_prot_t;
#endif /* H5AC_DEBUG */
typedef struct H5AC_t {
unsigned nslots; /*number of cache slots */
H5AC_info_t **slot; /*the cache slots, an array of pointers to the cached objects */
unsigned nslots; /*number of cache slots */
H5AC_info_t **slot; /*the cache slots, an array of pointers to the cached objects */
#ifdef H5AC_DEBUG
H5AC_prot_t *prot; /*the protected slots */
H5AC_prot_t *prot; /*the protected slots */
#endif /* H5AC_DEBUG */
int nprots; /*number of protected objects */
int nprots; /*number of protected objects */
struct {
unsigned nhits; /*number of cache hits */
unsigned nmisses; /*number of cache misses */
unsigned ninits; /*number of cache inits */
unsigned nflushes; /*number of flushes to disk */
} diagnostics[H5AC_NTYPES]; /*diagnostics for each type of object*/
unsigned nhits; /*number of cache hits */
unsigned nmisses; /*number of cache misses */
unsigned ninits; /*number of cache inits */
unsigned nflushes; /*number of flushes to disk */
} diagnostics[H5AC_NTYPES]; /*diagnostics for each type of object*/
} H5AC_t;
/*
......@@ -112,26 +112,26 @@ typedef struct H5AC_t {
*/
__DLL__ herr_t H5AC_dest(H5F_t *f);
__DLL__ void *H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2);
const void *udata1, void *udata2);
__DLL__ void *H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2);
const void *udata1, void *udata2);
__DLL__ herr_t H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
void *thing);
void *thing);
__DLL__ herr_t H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
hbool_t destroy);
hbool_t destroy);
__DLL__ herr_t H5AC_create(H5F_t *f, int size_hint);
__DLL__ herr_t H5AC_rename(H5F_t *f, const H5AC_class_t *type,
haddr_t old_addr, haddr_t new_addr);
haddr_t old_addr, haddr_t new_addr);
__DLL__ herr_t H5AC_set(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
void *thing);
void *thing);
__DLL__ herr_t H5AC_debug(H5F_t *f);
#define H5AC_find(F,TYPE,ADDR,UDATA1,UDATA2) \
((F)->shared->cache->slot[H5AC_HASH(F,ADDR)]!=NULL && \
((F)->shared->cache->slot[H5AC_HASH(F,ADDR)]->type==(TYPE) && \
(F)->shared->cache->slot[H5AC_HASH(F,ADDR)]->addr==ADDR) ? \
((F)->shared->cache->diagnostics[(TYPE)->id].nhits++, \
(F)->shared->cache->slot[H5AC_HASH(F,ADDR)]) : \
#define H5AC_find(F,TYPE,ADDR,UDATA1,UDATA2) \
((F)->shared->cache->slot[H5AC_HASH(F,ADDR)]!=NULL && \
((F)->shared->cache->slot[H5AC_HASH(F,ADDR)]->type==(TYPE) && \
(F)->shared->cache->slot[H5AC_HASH(F,ADDR)]->addr==ADDR) ? \
((F)->shared->cache->diagnostics[(TYPE)->id].nhits++, \
(F)->shared->cache->slot[H5AC_HASH(F,ADDR)]) : \
H5AC_find_f(F, TYPE, ADDR, UDATA1, UDATA2))
#endif /* !_H5ACprivate_H */
......
......@@ -38,8 +38,8 @@ struct H5A_t {
size_t ds_size; /* Size of dataspace on disk */
void *data; /* Attribute data (on a temporary basis) */
size_t data_size; /* Size of data on disk */
H5HG_t sh_heap; /*if defined, attribute is in global heap */
H5F_t *sh_file; /*file pointer if this is a shared attribute */
H5HG_t sh_heap; /*if defined, attribute is in global heap */
H5F_t *sh_file; /*file pointer if this is a shared attribute */
};
/* Function prototypes for H5T package scope */
......
......@@ -28,7 +28,7 @@ typedef herr_t (*H5A_operator_t)(hid_t location_id/*in*/,
/* Public function prototypes */
__DLL__ hid_t H5Acreate(hid_t loc_id, const char *name, hid_t type_id,
hid_t space_id, hid_t plist_id);
hid_t space_id, hid_t plist_id);
__DLL__ hid_t H5Aopen_name(hid_t loc_id, const char *name);
__DLL__ hid_t H5Aopen_idx(hid_t loc_id, unsigned idx);
__DLL__ herr_t H5Awrite(hid_t attr_id, hid_t type_id, const void *buf);
......@@ -39,7 +39,7 @@ __DLL__ hid_t H5Aget_type(hid_t attr_id);
__DLL__ ssize_t H5Aget_name(hid_t attr_id, size_t buf_size, char *buf);
__DLL__ int H5Aget_num_attrs(hid_t loc_id);
__DLL__ herr_t H5Aiterate(hid_t loc_id, unsigned *attr_num, H5A_operator_t op,
void *op_data);
void *op_data);
__DLL__ herr_t H5Adelete(hid_t loc_id, const char *name);
#ifdef __cplusplus
......
This diff is collapsed.
/*-------------------------------------------------------------------------
* Copyright (C) 1997 National Center for Supercomputing Applications.
* All rights reserved.
* Copyright (C) 1997 National Center for Supercomputing Applications.
* All rights reserved.
*
*-------------------------------------------------------------------------
*
* Created: H5Bprivate.h
* Jul 10 1997
* Robb Matzke <matzke@llnl.gov>
* Created: H5Bprivate.h
* Jul 10 1997
* Robb Matzke <matzke@llnl.gov>
*
* Purpose: Private non-prototype header.
* Purpose: Private non-prototype header.
*
* Modifications:
*
......@@ -17,45 +17,45 @@
#ifndef _H5Bprivate_H
#define _H5Bprivate_H
#include "H5Bpublic.h" /*API prototypes */
#include "H5Bpublic.h" /*API prototypes */
/* Private headers needed by this file */
#include "H5private.h"
#include "H5Fprivate.h"
#include "H5ACprivate.h" /*cache */
#include "H5ACprivate.h" /*cache */
/*
* 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.
* after each B-tree operation. Note that this slows down the
* library considerably! Debugging the B-tree depends on assert()
* being enabled.
*/
#ifdef NDEBUG
# undef H5B_DEBUG
#endif
#define H5B_MAGIC "TREE" /*tree node magic number */
#define H5B_SIZEOF_MAGIC 4 /*size of magic number */
#define H5B_SIZEOF_HDR(F) \
(H5B_SIZEOF_MAGIC + /*magic number */ \
4 + /*type, level, num entries */ \
2*H5F_SIZEOF_ADDR(F)) /*left and right sibling addresses */
#define H5B_MAGIC "TREE" /*tree node magic number */
#define H5B_SIZEOF_MAGIC 4 /*size of magic number */
#define H5B_SIZEOF_HDR(F) \
(H5B_SIZEOF_MAGIC + /*magic number */ \
4 + /*type, level, num entries */ \
2*H5F_SIZEOF_ADDR(F)) /*left and right sibling addresses */
#define H5B_K(F,TYPE) /*K value given file and Btree subclass */ \
#define H5B_K(F,TYPE) /*K value given file and Btree subclass */ \
((F)->shared->fcpl->btree_k[(TYPE)->id])
typedef enum H5B_ins_t {
H5B_INS_ERROR = -1, /*error return value */
H5B_INS_NOOP = 0, /*insert made no changes */
H5B_INS_LEFT = 1, /*insert new node to left of cur node */
H5B_INS_RIGHT = 2, /*insert new node to right of cur node */
H5B_INS_CHANGE = 3, /*change child address for cur node */
H5B_INS_FIRST = 4, /*insert first node in (sub)tree */
H5B_INS_REMOVE = 5 /*remove current node */
H5B_INS_ERROR = -1, /*error return value */
H5B_INS_NOOP = 0, /*insert made no changes */
H5B_INS_LEFT = 1, /*insert new node to left of cur node */
H5B_INS_RIGHT = 2, /*insert new node to right of cur node */
H5B_INS_CHANGE = 3, /*change child address for cur node */
H5B_INS_FIRST = 4, /*insert first node in (sub)tree */
H5B_INS_REMOVE = 5 /*remove current node */
} H5B_ins_t;
typedef enum H5B_subid_t {
H5B_SNODE_ID = 0, /*B-tree is for symbol table nodes */
H5B_ISTORE_ID = 1 /*B-tree is for indexed object storage */
H5B_SNODE_ID = 0, /*B-tree is for symbol table nodes */
H5B_ISTORE_ID = 1 /*B-tree is for indexed object storage */
} H5B_subid_t;
/*
......@@ -65,78 +65,78 @@ typedef enum H5B_subid_t {
* has an array of K values indexed by the `id' class field below. The
* array is initialized with the HDF5_BTREE_K_DEFAULT macro.
*/
struct H5B_t; /*forward decl */
struct H5B_t; /*forward decl */
typedef struct H5B_class_t {
H5B_subid_t id; /*id as found in file*/
size_t sizeof_nkey; /*size of native (memory) key*/
size_t (*get_sizeof_rkey)(H5F_t*, const void*); /*raw key size */
herr_t (*new_node)(H5F_t*, H5B_ins_t, void*, void*, void*, haddr_t*);
int (*cmp2)(H5F_t*, void*, void*, void*); /*compare 2 keys */
int (*cmp3)(H5F_t*, void*, void*, void*); /*compare 3 keys */
herr_t (*found)(H5F_t*, haddr_t, const void*, void*, const void*);
H5B_subid_t id; /*id as found in file*/
size_t sizeof_nkey; /*size of native (memory) key*/
size_t (*get_sizeof_rkey)(H5F_t*, const void*); /*raw key size */
herr_t (*new_node)(H5F_t*, H5B_ins_t, void*, void*, void*, haddr_t*);
int (*cmp2)(H5F_t*, void*, void*, void*); /*compare 2 keys */
int (*cmp3)(H5F_t*, void*, void*, void*); /*compare 3 keys */
herr_t (*found)(H5F_t*, haddr_t, const void*, void*, const void*);
/* insert new data */
H5B_ins_t (*insert)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
void*, hbool_t*, haddr_t*);
H5B_ins_t (*insert)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
void*, hbool_t*, haddr_t*);
/* min insert uses min leaf, not new(), similarily for max insert */
hbool_t follow_min;
hbool_t follow_max;
hbool_t follow_min;
hbool_t follow_max;
/* remove existing data */
H5B_ins_t (*remove)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
hbool_t*);
H5B_ins_t (*remove)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
hbool_t*);