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