diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2010-01-28 13:11:38 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2010-01-28 13:11:38 (GMT) |
commit | 3360c3af0c100ac4d3a2fe2865f34661da862ec5 (patch) | |
tree | 9caf7dba62679504aa39ec02ebb72d8b8b5a848d /src/H5HLpkg.h | |
parent | 5b4d3279099e7e4fad6e0092c77aa93dfd35d616 (diff) | |
download | hdf5-3360c3af0c100ac4d3a2fe2865f34661da862ec5.zip hdf5-3360c3af0c100ac4d3a2fe2865f34661da862ec5.tar.gz hdf5-3360c3af0c100ac4d3a2fe2865f34661da862ec5.tar.bz2 |
[svn-r18175] Description:
Bring r17986:18172 from trunk to revise_chunks branch.
Tested on:
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (jam) w/PGI compilers, w/default API=1.8.x,
w/C++ & FORTRAN, w/threadsafe, in debug mode
Linux/64-amd64 2.6 (amani) w/Intel compilers, w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in debug mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
Diffstat (limited to 'src/H5HLpkg.h')
-rw-r--r-- | src/H5HLpkg.h | 98 |
1 files changed, 81 insertions, 17 deletions
diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h index 1e34a48..926ecd3 100644 --- a/src/H5HLpkg.h +++ b/src/H5HLpkg.h @@ -32,7 +32,6 @@ #include "H5HLprivate.h" /* Other private headers needed by this file */ -#include "H5ACprivate.h" /* Metadata cache */ #include "H5FLprivate.h" /* Free lists */ @@ -40,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); @@ -59,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 /****************************/ @@ -76,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(H5HL_dblk_t *dblk); #endif /* _H5HLpkg_H */ |