1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * Copyright by The HDF Group.                                               *
3  * Copyright by the Board of Trustees of the University of Illinois.         *
4  * All rights reserved.                                                      *
5  *                                                                           *
6  * This file is part of HDF5.  The full HDF5 copyright notice, including     *
7  * terms governing use, modification, and redistribution, is contained in    *
8  * the COPYING file, which can be found at the root of the source code       *
9  * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.  *
10  * If you do not have access to either file, you may request a copy from     *
11  * help@hdfgroup.org.                                                        *
12  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
13 
14 /*-------------------------------------------------------------------------
15  *
16  * Created:		H5HLprivate.h
17  *			Jul 16 1997
18  *			Robb Matzke <matzke@llnl.gov>
19  *
20  * Purpose:
21  *
22  * Modifications:
23  *
24  *-------------------------------------------------------------------------
25  */
26 #ifndef _H5HLprivate_H
27 #define _H5HLprivate_H
28 
29 /* Include package's public header */
30 #include "H5HLpublic.h"
31 
32 /* Private headers needed by this file. */
33 #include "H5private.h"		/* Generic Functions			*/
34 #include "H5ACprivate.h"	/* Metadata cache			*/
35 #include "H5Fprivate.h"		/* File access				*/
36 
37 /*
38  * Feature: Define H5HL_DEBUG on the compiler command line if you want to
39  *	    diagnostic messages from this layer.
40  */
41 #ifdef NDEBUG
42 #  undef H5HL_DEBUG
43 #endif
44 
45 #define H5HL_ALIGN(X)	((((unsigned)X)+7)&(unsigned)(~0x07)) /*align on 8-byte boundary	*/
46 
47 #define H5HL_SIZEOF_FREE(F)						      \
48     H5HL_ALIGN(H5F_SIZEOF_SIZE (F) +	/*ptr to next free block	*/    \
49 	       H5F_SIZEOF_SIZE (F))	/*size of this free block	*/
50 
51 /****************************/
52 /* Library Private Typedefs */
53 /****************************/
54 
55 /* Typedef for local heap in memory (defined in H5HLpkg.h) */
56 typedef struct H5HL_t H5HL_t;
57 
58 /*
59  * Library prototypes...
60  */
61 H5_DLL herr_t H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr/*out*/);
62 H5_DLL H5HL_t *H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw);
63 H5_DLL void *H5HL_offset_into(const H5HL_t *heap, size_t offset);
64 H5_DLL herr_t H5HL_remove(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t offset,
65     size_t size);
66 H5_DLL herr_t H5HL_unprotect(H5HL_t *heap);
67 H5_DLL size_t H5HL_insert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, size_t size,
68     const void *buf);
69 H5_DLL herr_t H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
70 H5_DLL herr_t H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size);
71 H5_DLL herr_t H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size);
72 
73 /* Debugging functions */
74 H5_DLL herr_t H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
75 			  int fwidth);
76 #endif
77 
78