diff options
Diffstat (limited to 'src/H5ACprivate.h')
-rw-r--r-- | src/H5ACprivate.h | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h index 884bc3c6..28710d9 100644 --- a/src/H5ACprivate.h +++ b/src/H5ACprivate.h @@ -24,6 +24,16 @@ #include <H5Fprivate.h> /* + * 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. + */ +#ifdef NDEBUG +# undef H5AC_DEBUG +#endif + +/* * 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 @@ -48,9 +58,10 @@ typedef enum H5AC_subid_t { typedef struct H5AC_class_t { H5AC_subid_t id; - void *(*load)(H5F_t*, haddr_t addr, const void *udata1, + void *(*load)(H5F_t*, const haddr_t *addr, const void *udata1, void *udata2); - herr_t (*flush)(H5F_t*, hbool_t dest, haddr_t addr, void *thing); + herr_t (*flush)(H5F_t*, hbool_t dest, const haddr_t *addr, + void *thing); } H5AC_class_t; /* @@ -59,7 +70,7 @@ typedef struct H5AC_class_t { * own cache, an array of slots. */ #define H5AC_NSLOTS 10330 /*prime number tend to work best */ -#define H5AC_HASH(F,ADDR) ((unsigned)(ADDR) % (F)->shared->cache->nslots) +#define H5AC_HASH(F,ADDR_P) H5F_addr_hash(ADDR_P,(F)->shared->cache->nslots) typedef struct H5AC_prot_t { const H5AC_class_t *type; /*type of protected thing */ @@ -92,27 +103,28 @@ typedef struct H5AC_t { * Library prototypes. */ herr_t H5AC_dest (H5F_t *f); -void *H5AC_find_f (H5F_t *f, const H5AC_class_t *type, haddr_t addr, +void *H5AC_find_f (H5F_t *f, const H5AC_class_t *type, const haddr_t *addr, const void *udata1, void *udata2); -void * H5AC_protect (H5F_t *f, const H5AC_class_t *type, haddr_t addr, +void * H5AC_protect (H5F_t *f, const H5AC_class_t *type, const haddr_t *addr, const void *udata1, void *udata2); -herr_t H5AC_unprotect (H5F_t *f, const H5AC_class_t *type, haddr_t addr, +herr_t H5AC_unprotect (H5F_t *f, const H5AC_class_t *type, const haddr_t *addr, void *thing); -herr_t H5AC_flush (H5F_t *f, const H5AC_class_t *type, haddr_t addr, +herr_t H5AC_flush (H5F_t *f, const H5AC_class_t *type, const haddr_t *addr, hbool_t destroy); herr_t H5AC_new (H5F_t *f, intn size_hint); -herr_t H5AC_rename (H5F_t *f, const H5AC_class_t *type, haddr_t old, - haddr_t new); -herr_t H5AC_set (H5F_t *f, const H5AC_class_t *type, haddr_t addr, +herr_t H5AC_rename (H5F_t *f, const H5AC_class_t *type, + const haddr_t *old_addr, const haddr_t *new_addr); +herr_t H5AC_set (H5F_t *f, const H5AC_class_t *type, const haddr_t *addr, void *thing); herr_t H5AC_debug (H5F_t *f); -#define H5AC_find(F,TYPE,ADDR,UDATA1,UDATA2) \ - (((F)->shared->cache->slot[H5AC_HASH(F,ADDR)].type==(TYPE) && \ - (F)->shared->cache->slot[H5AC_HASH(F,ADDR)].addr==(ADDR)) ? \ +#define H5AC_find(F,TYPE,ADDR_P,UDATA1,UDATA2) \ + (((F)->shared->cache->slot[H5AC_HASH(F,ADDR_P)].type==(TYPE) && \ + H5F_addr_eq (&((F)->shared->cache->slot[H5AC_HASH(F,ADDR_P)].addr), \ + ADDR_P)) ? \ ((F)->shared->cache->diagnostics[(TYPE)->id].nhits++, \ - (F)->shared->cache->slot[H5AC_HASH(F,ADDR)].thing) : \ - H5AC_find_f (F, TYPE, ADDR, UDATA1, UDATA2)) + (F)->shared->cache->slot[H5AC_HASH(F,ADDR_P)].thing) : \ + H5AC_find_f (F, TYPE, ADDR_P, UDATA1, UDATA2)) #endif /* !_H5ACprivate_H */ |