summaryrefslogtreecommitdiffstats
path: root/src/H5HLpkg.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5HLpkg.h')
-rw-r--r--src/H5HLpkg.h97
1 files changed, 81 insertions, 16 deletions
diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h
index 50cb4ed..8052eb1 100644
--- a/src/H5HLpkg.h
+++ b/src/H5HLpkg.h
@@ -39,15 +39,15 @@
/* Package Private Variables */
/*****************************/
-/* The cache subclass */
-H5_DLLVAR const H5AC_class_t H5AC_LHEAP[1];
+/* The local heap prefix cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_LHEAP_PRFX[1];
+
+/* The local heap data block cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_LHEAP_DBLK[1];
/* Declare extern the free list to manage the H5HL_free_t struct */
H5FL_EXTERN(H5HL_free_t);
-/* Declare extern the free list to manage the H5HL_t struct */
-H5FL_EXTERN(H5HL_t);
-
/* Declare extern the PQ free list to manage the heap chunk information */
H5FL_BLK_EXTERN(lheap_chunk);
@@ -58,10 +58,14 @@ H5FL_BLK_EXTERN(lheap_chunk);
#define H5HL_SIZEOF_HDR(F) \
H5HL_ALIGN(H5_SIZEOF_MAGIC + /*heap signature */ \
- 4 + /*reserved */ \
- H5F_SIZEOF_SIZE (F) + /*data size */ \
- H5F_SIZEOF_SIZE (F) + /*free list head */ \
- H5F_SIZEOF_ADDR (F)) /*data address */
+ 1 + /*version */ \
+ 3 + /*reserved */ \
+ H5F_SIZEOF_SIZE(F) + /*data size */ \
+ H5F_SIZEOF_SIZE(F) + /*free list head */ \
+ H5F_SIZEOF_ADDR(F)) /*data address */
+
+/* Value indicating end of free list on disk */
+#define H5HL_FREE_NULL 1
/****************************/
@@ -75,22 +79,83 @@ typedef struct H5HL_free_t {
struct H5HL_free_t *next; /*next entry in free list */
} H5HL_free_t;
+/* Forward declarations */
+typedef struct H5HL_dblk_t H5HL_dblk_t;
+typedef struct H5HL_prfx_t H5HL_prfx_t;
+
struct H5HL_t {
- H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
- /* first field in structure */
- haddr_t addr; /*address of data */
- size_t heap_alloc; /*size of heap on disk and in mem */
- uint8_t *chunk; /*the chunk, including header */
+ /* General heap-management fields */
+ size_t rc; /* Ref. count for prefix & data block using this struct */
+ size_t prots; /* # of times the heap has been protected */
+ size_t sizeof_size; /* Size of file sizes */
+ size_t sizeof_addr; /* Size of file addresses */
+ hbool_t single_cache_obj; /* Indicate if the heap is a single object in the cache */
+
+ /* Prefix-specific fields */
+ H5HL_prfx_t *prfx; /* The prefix object for the heap */
+ haddr_t prfx_addr; /* address of heap prefix */
+ size_t prfx_size; /* size of heap prefix */
+
+ /* Data block-specific fields */
+ H5HL_dblk_t *dblk; /* The data block object for the heap */
+ haddr_t dblk_addr; /* address of data block */
+ size_t dblk_size; /* size of heap data block on disk and in mem */
+ uint8_t *dblk_image; /* The data block image */
H5HL_free_t *freelist; /*the free list */
};
+/* Struct for heap data block */
+struct H5HL_dblk_t {
+ H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+ /* first field in structure */
+ H5HL_t *heap; /* Pointer to heap for data block */
+};
+
+/* Struct for heap prefix */
+struct H5HL_prfx_t {
+ H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+ /* first field in structure */
+ H5HL_t *heap; /* Pointer to heap for prefix */
+};
+
+/* Callback information for loading local heap prefix from disk */
+typedef struct H5HL_cache_prfx_ud_t {
+ /* Downwards */
+ size_t sizeof_size; /* Size of file sizes */
+ size_t sizeof_addr; /* Size of file addresses */
+ size_t sizeof_prfx; /* Size of heap prefix */
+
+ /* Upwards */
+ hbool_t loaded; /* Whether prefix was loaded from file */
+ hsize_t free_block; /* First free block in heap */
+} H5HL_cache_prfx_ud_t;
+
+/* Callback information for loading local heap data block from disk */
+typedef struct H5HL_cache_dblk_ud_t {
+ /* Downwards */
+ H5HL_t *heap; /* Local heap */
+ hsize_t free_block; /* First free block in heap */
+
+ /* Upwards */
+ hbool_t loaded; /* Whether data block was loaded from file */
+} H5HL_cache_dblk_ud_t;
+
/******************************/
/* Package Private Prototypes */
/******************************/
-H5_DLL herr_t H5HL_dest(H5F_t *f, H5HL_t *heap);
-H5_DLL herr_t H5HL_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr);
+/* Heap routines */
+H5_DLL H5HL_t *H5HL_new(size_t sizeof_size, size_t sizeof_addr, size_t prfx_size);
+H5_DLL herr_t H5HL_dest(H5HL_t *heap);
+
+/* Heap prefix routines */
+H5_DLL H5HL_prfx_t *H5HL_prfx_new(H5HL_t *heap);
+H5_DLL herr_t H5HL_prfx_dest(H5HL_prfx_t *prfx);
+
+/* Heap data block routines */
+H5_DLL H5HL_dblk_t *H5HL_dblk_new(H5HL_t *heap);
+H5_DLL herr_t H5HL_dblk_dest(H5F_t *f, H5HL_dblk_t *dblk);
#endif /* _H5HLpkg_H */