summaryrefslogtreecommitdiffstats
path: root/src/H5ACprivate.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5ACprivate.h')
-rw-r--r--src/H5ACprivate.h42
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 */