diff options
Diffstat (limited to 'src/H5HGpkg.h')
-rw-r--r-- | src/H5HGpkg.h | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/src/H5HGpkg.h b/src/H5HGpkg.h index e814367..96be009 100644 --- a/src/H5HGpkg.h +++ b/src/H5HGpkg.h @@ -32,6 +32,9 @@ #include "H5HGprivate.h" /* Other private headers needed by this file */ +#include "H5ACprivate.h" /* Metadata cache */ +#include "H5FLprivate.h" /* Free lists */ + /*****************************/ /* Package Private Variables */ @@ -40,11 +43,40 @@ /* The cache subclass */ H5_DLLVAR const H5AC_class_t H5AC_GHEAP[1]; +/* Declare extern the free list to manage the H5HG_t struct */ +H5FL_EXTERN(H5HG_heap_t); + +/* Declare extern the free list to manage sequences of H5HG_obj_t's */ +H5FL_SEQ_EXTERN(H5HG_obj_t); + +/* Declare extern the PQ free list to manage heap chunks */ +H5FL_BLK_EXTERN(gheap_chunk); + + /**************************/ /* Package Private Macros */ /**************************/ /* + * Global heap collection version. + */ +#define H5HG_VERSION 1 + +/* + * All global heap collections are at least this big. This allows us to read + * most collections with a single read() since we don't have to read a few + * bytes of header to figure out the size. If the heap is larger than this + * then a second read gets the rest after we've decoded the header. + */ +#define H5HG_MINSIZE 4096 + +/* + * Maximum length of the CWFS list, the list of remembered collections that + * have free space. + */ +#define H5HG_NCWFS 16 + +/* * Pad all global heap messages to a multiple of eight bytes so we can load * the entire collection into memory and operate on it there. Eight should * be sufficient for machines that have alignment constraints because our @@ -56,6 +88,16 @@ H5_DLLVAR const H5AC_class_t H5AC_GHEAP[1]; #define H5HG_ISALIGNED(X) ((X)==H5HG_ALIGN(X)) /* + * The size of the collection header, always a multiple of the alignment so + * that the stuff that follows the header is aligned. + */ +#define H5HG_SIZEOF_HDR(f) \ + H5HG_ALIGN(4 + /*magic number */ \ + 1 + /*version number */ \ + 3 + /*reserved */ \ + H5F_SIZEOF_SIZE(f)) /*collection size */ + +/* * The overhead associated with each object in the heap, always a multiple of * the alignment so that the stuff that follows the header is aligned. */ @@ -65,6 +107,17 @@ H5_DLLVAR const H5AC_class_t H5AC_GHEAP[1]; 4 + /*reserved */ \ H5F_SIZEOF_SIZE(f)) /*object data size */ +/* + * The initial guess for the number of messages in a collection. We assume + * that all objects in that collection are zero length, giving the maximum + * possible number of objects in the collection. The collection itself has + * some overhead and each message has some overhead. The `+2' accounts for + * rounding and for the free space object. + */ +#define H5HG_NOBJS(f,z) (int)((((z)-H5HG_SIZEOF_HDR(f))/ \ + H5HG_SIZEOF_OBJHDR(f)+2)) + + /****************************/ /* Package Private Typedefs */ /****************************/ @@ -92,6 +145,7 @@ struct H5HG_heap_t { /******************************/ /* Package Private Prototypes */ /******************************/ +H5_DLL herr_t H5HG_dest(H5F_t *f, H5HG_heap_t *heap); -#endif +#endif /* _H5HGpkg_H */ |