MISR Toolkit  1.5.1
H5HFpkg.h
Go to the documentation of this file.
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  * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
16  * Friday, February 24, 2006
17  *
18  * Purpose: This file contains declarations which are visible only within
19  * the H5HF package. Source files outside the H5HF package should
20  * include H5HFprivate.h instead.
21  */
22 #ifndef H5HF_PACKAGE
23 #error "Do not include this file outside the H5HF package!"
24 #endif
25 
26 #ifndef _H5HFpkg_H
27 #define _H5HFpkg_H
28 
29 /* Get package's private header */
30 #include "H5HFprivate.h"
31 
32 /* Other private headers needed by this file */
33 #include "H5ACprivate.h" /* Metadata cache */
34 #include "H5B2private.h" /* v2 B-trees */
35 #include "H5FLprivate.h" /* Free Lists */
36 #include "H5FSprivate.h" /* Free space manager */
37 #include "H5SLprivate.h" /* Skip lists */
38 
39 /**************************/
40 /* Package Private Macros */
41 /**************************/
42 
43 /* Size of checksum information (on disk) */
44 #define H5HF_SIZEOF_CHKSUM 4
45 
46 /* "Standard" size of prefix information for fractal heap metadata */
47 #define H5HF_METADATA_PREFIX_SIZE(c) ( \
48  H5_SIZEOF_MAGIC /* Signature */ \
49  + 1 /* Version */ \
50  + ((c) ? H5HF_SIZEOF_CHKSUM : 0) /* Metadata checksum */ \
51  )
52 
53 /* Size of doubling-table information */
54 #define H5HF_DTABLE_INFO_SIZE(h) ( \
55  2 /* Width of table (i.e. # of columns) */ \
56  + (h)->sizeof_size /* Starting block size */ \
57  + (h)->sizeof_size /* Maximum direct block size */ \
58  + 2 /* Max. size of heap (log2 of actual value - i.e. the # of bits) */ \
59  + 2 /* Starting # of rows in root indirect block */ \
60  + (h)->sizeof_addr /* File address of table managed */ \
61  + 2 /* Current # of rows in root indirect block */ \
62  )
63 
64 /* Flags for status byte */
65 #define H5HF_HDR_FLAGS_HUGE_ID_WRAPPED 0x01 /* "huge" object IDs have wrapped */
66 #define H5HF_HDR_FLAGS_CHECKSUM_DBLOCKS 0x02 /* checksum direct blocks */
67 
68 /* Size of the fractal heap header on disk */
69 /* (this is the fixed-len portion, the variable-len I/O filter information
70  * follows this information, if there are I/O filters for the heap)
71  */
72 #define H5HF_HEADER_SIZE(h) ( \
73  /* General metadata fields */ \
74  H5HF_METADATA_PREFIX_SIZE(TRUE) \
75  \
76  /* Fractal Heap Header specific fields */ \
77  \
78  /* General heap information */ \
79  + 2 /* Heap ID len */ \
80  + 2 /* I/O filters' encoded len */ \
81  + 1 /* Status flags */ \
82  \
83  /* "Huge" object fields */ \
84  + 4 /* Max. size of "managed" object */ \
85  + (h)->sizeof_size /* Next ID for "huge" object */ \
86  + (h)->sizeof_addr /* File address of "huge" object tracker B-tree */ \
87  \
88  /* "Managed" object free space fields */ \
89  + (h)->sizeof_size /* Total man. free space */ \
90  + (h)->sizeof_addr /* File address of free section header */ \
91  \
92  /* Statistics fields */ \
93  + (h)->sizeof_size /* Size of man. space in heap */ \
94  + (h)->sizeof_size /* Size of man. space iterator offset in heap */ \
95  + (h)->sizeof_size /* Size of alloacted man. space in heap */ \
96  + (h)->sizeof_size /* Number of man. objects in heap */ \
97  + (h)->sizeof_size /* Size of huge space in heap */ \
98  + (h)->sizeof_size /* Number of huge objects in heap */ \
99  + (h)->sizeof_size /* Size of tiny space in heap */ \
100  + (h)->sizeof_size /* Number of tiny objects in heap */ \
101  \
102  /* "Managed" object doubling table info */ \
103  + H5HF_DTABLE_INFO_SIZE(h) /* Size of managed obj. doubling-table info */ \
104  )
105 
106 /* Size of overhead for a direct block */
107 #define H5HF_MAN_ABS_DIRECT_OVERHEAD(h) ( \
108  /* General metadata fields */ \
109  H5HF_METADATA_PREFIX_SIZE(h->checksum_dblocks) \
110  \
111  /* Fractal heap managed, absolutely mapped direct block specific fields */ \
112  + (h)->sizeof_addr /* File address of heap owning the block */ \
113  + (h)->heap_off_size /* Offset of the block in the heap */ \
114  )
115 
116 /* Size of managed indirect block entry for a child direct block */
117 #define H5HF_MAN_INDIRECT_CHILD_DIR_ENTRY_SIZE(h) ( \
118  ((h)->filter_len > 0 ? \
119  ((h)->sizeof_addr + (h)->sizeof_size + 4) : /* Size of entries for filtered direct blocks */ \
120  (h)->sizeof_addr) /* Size of entries for un-filtered direct blocks */ \
121  )
122 
123 /* Size of managed indirect block */
124 #define H5HF_MAN_INDIRECT_SIZE(h, r) ( \
125  /* General metadata fields */ \
126  H5HF_METADATA_PREFIX_SIZE(TRUE) \
127  \
128  /* Fractal heap managed, absolutely mapped indirect block specific fields */ \
129  + (h)->sizeof_addr /* File address of heap owning the block */ \
130  + (h)->heap_off_size /* Offset of the block in the heap */ \
131  + (MIN(r, (h)->man_dtable.max_direct_rows) * (h)->man_dtable.cparam.width * H5HF_MAN_INDIRECT_CHILD_DIR_ENTRY_SIZE(h)) /* Size of entries for direct blocks */ \
132  + (((r > (h)->man_dtable.max_direct_rows) ? (r - (h)->man_dtable.max_direct_rows) : 0) * (h)->man_dtable.cparam.width * (h)->sizeof_addr) /* Size of entries for indirect blocks */ \
133  )
134 
135 /* Compute the # of bytes required to store an offset into a given buffer size */
136 #define H5HF_SIZEOF_OFFSET_BITS(b) (((b) + 7) / 8)
137 #define H5HF_SIZEOF_OFFSET_LEN(l) H5HF_SIZEOF_OFFSET_BITS(H5VM_log2_of2((unsigned)(l)))
138 
139 /* Heap ID bit flags */
140 /* Heap ID version (2 bits: 6-7) */
141 #define H5HF_ID_VERS_CURR 0x00 /* Current version of ID format */
142 #define H5HF_ID_VERS_MASK 0xC0 /* Mask for getting the ID version from flags */
143 /* Heap ID type (2 bits: 4-5) */
144 #define H5HF_ID_TYPE_MAN 0x00 /* "Managed" object - stored in fractal heap blocks */
145 #define H5HF_ID_TYPE_HUGE 0x10 /* "Huge" object - stored in file directly */
146 #define H5HF_ID_TYPE_TINY 0x20 /* "Tiny" object - stored in heap ID directly */
147 #define H5HF_ID_TYPE_RESERVED 0x30 /* "?" object - reserved for future use */
148 #define H5HF_ID_TYPE_MASK 0x30 /* Mask for getting the ID type from flags */
149 /* Heap ID bits 0-3 reserved for future use */
150 
151 /* Encode a "managed" heap ID */
152 #define H5HF_MAN_ID_ENCODE(i, h, o, l) \
153  *(i) = H5HF_ID_VERS_CURR | H5HF_ID_TYPE_MAN; \
154  (i)++; \
155  UINT64ENCODE_VAR((i), (o), (h)->heap_off_size); \
156  UINT64ENCODE_VAR((i), (l), (h)->heap_len_size)
157 
158 /* Decode a "managed" heap ID */
159 #define H5HF_MAN_ID_DECODE(i, h, f, o, l) \
160  f = *(uint8_t *)i++; \
161  UINT64DECODE_VAR((i), (o), (h)->heap_off_size); \
162  UINT64DECODE_VAR((i), (l), (h)->heap_len_size)
163 
164 /* Free space section types for fractal heap */
165 /* (values stored in free space data structures in file) */
166 #define H5HF_FSPACE_SECT_SINGLE 0 /* Section is a range of actual bytes in a direct block */
167 #define H5HF_FSPACE_SECT_FIRST_ROW 1 /* Section is first range of blocks in an indirect block row */
168 #define H5HF_FSPACE_SECT_NORMAL_ROW 2 /* Section is a range of blocks in an indirect block row */
169 #define H5HF_FSPACE_SECT_INDIRECT 3 /* Section is a span of blocks in an indirect block */
170 
171 /* Flags for 'op' operations */
172 #define H5HF_OP_MODIFY 0x0001 /* Operation will modify object */
173 #define H5HF_OP_FLAGS (H5HF_OP_MODIFY) /* Bit-wise OR of all op flags */
174 
175 /* Flags for 'root_iblock_flags' field in header */
176 #define H5HF_ROOT_IBLOCK_PINNED 0x01
177 #define H5HF_ROOT_IBLOCK_PROTECTED 0x02
178 
179 
180 /****************************/
181 /* Package Private Typedefs */
182 /****************************/
183 
184 /* Doubling-table info */
185 typedef struct H5HF_dtable_t {
186  /* Immutable, pre-set information for table */
187  H5HF_dtable_cparam_t cparam; /* Creation parameters for table */
188 
189  /* Derived information (stored, varies during lifetime of table) */
190  haddr_t table_addr; /* Address of first block for table */
191  /* Undefined if no space allocated for table */
192  unsigned curr_root_rows; /* Current number of rows in the root indirect block */
193  /* 0 indicates that the TABLE_ADDR field points
194  * to direct block (of START_BLOCK_SIZE) instead
195  * of indirect root block.
196  */
197 
198  /* Computed information (not stored) */
199  unsigned max_root_rows; /* Maximum # of rows in root indirect block */
200  unsigned max_direct_rows; /* Maximum # of direct rows in any indirect block */
201  unsigned start_bits; /* # of bits for starting block size (i.e. log2(start_block_size)) */
202  unsigned max_direct_bits; /* # of bits for max. direct block size (i.e. log2(max_direct_size)) */
203  unsigned max_dir_blk_off_size; /* Max. size of offsets in direct blocks */
204  unsigned first_row_bits; /* # of bits in address of first row */
205  hsize_t num_id_first_row; /* Number of IDs in first row of table */
206  hsize_t *row_block_size; /* Block size per row of indirect block */
207  hsize_t *row_block_off; /* Cumulative offset per row of indirect block */
208  hsize_t *row_tot_dblock_free; /* Total free space in dblocks for this row */
209  /* (For indirect block rows, it's the total
210  * free space in all direct blocks referenced
211  * from the indirect block)
212  */
213  size_t *row_max_dblock_free; /* Max. free space in dblocks for this row */
214  /* (For indirect block rows, it's the maximum
215  * free space in a direct block referenced
216  * from the indirect block)
217  */
218 } H5HF_dtable_t;
219 
220 /* Fractal heap free list info (forward decl - defined in H5HFflist.c) */
222 
223 /* Forward decl indirect block info */
225 
226 /* Fractal heap block location */
227 typedef struct H5HF_block_loc_t {
228  /* Necessary table fields */
229  unsigned row; /* Row of block in doubling table */
230  unsigned col; /* Column of block in doubling table */
231 
232  /* Derived/computed/cached table fields */
233  unsigned entry; /* Entry of block in doubling table */
234 
235  /* Infrastructure */
236  H5HF_indirect_t *context; /* Pointer to the indirect block containing the block */
237  struct H5HF_block_loc_t *up; /* Pointer to next level up in the stack of levels */
239 
240 /* Fractal heap block iterator info */
241 typedef struct H5HF_block_iter_t {
242  hbool_t ready; /* Set if iterator is finished initializing */
243  H5HF_block_loc_t *curr; /* Pointer to the current level information for iterator */
245 
246 /* Fractal heap free space section info */
247 typedef struct H5HF_free_section_t {
248  H5FS_section_info_t sect_info; /* Free space section information (must be first in struct) */
249  union {
250  struct {
251  H5HF_indirect_t *parent; /* Indirect block parent for free section's direct block */
252  unsigned par_entry; /* Entry of free section's direct block in parent indirect block */
253  } single;
254  struct {
255  struct H5HF_free_section_t *under; /* Pointer to indirect block underlying row section */
256  unsigned row; /* Row for range of blocks */
257  unsigned col; /* Column for range of blocks */
258  unsigned num_entries; /* Number of entries covered */
259 
260  /* Fields that aren't stored */
261  hbool_t checked_out; /* Flag to indicate that a row section is temporarily out of the free space manager */
262  } row;
263  struct {
264  /* Holds either a pointer to an indirect block (if its "live") or
265  * the block offset of it's indirect block (if its "serialized")
266  * (This allows the indirect block that the section is within to
267  * be compared with other sections, whether it's serialized
268  * or not)
269  */
270  union {
271  H5HF_indirect_t *iblock; /* Indirect block for free section */
272  hsize_t iblock_off; /* Indirect block offset in "heap space" */
273  } u;
274  unsigned row; /* Row for range of blocks */
275  unsigned col; /* Column for range of blocks */
276  unsigned num_entries; /* Number of entries covered */
277 
278  /* Fields that aren't stored */
279  struct H5HF_free_section_t *parent; /* Pointer to "parent" indirect section */
280  unsigned par_entry; /* Entry within parent indirect section */
281  hsize_t span_size; /* Size of space tracked, in "heap space" */
282  unsigned iblock_entries; /* Number of entries in indirect block where section is located */
283  unsigned rc; /* Reference count of outstanding row & child indirect sections */
284  unsigned dir_nrows; /* Number of direct rows in section */
285  struct H5HF_free_section_t **dir_rows; /* Array of pointers to outstanding row sections */
286  unsigned indir_nents; /* Number of indirect entries in section */
287  struct H5HF_free_section_t **indir_ents; /* Array of pointers to outstanding child indirect sections */
288  } indirect;
289  } u;
291 
292 /* The fractal heap header information */
293 /* (Each fractal heap header has certain information that is shared across all
294  * the instances of blocks in that fractal heap)
295  */
296 typedef struct H5HF_hdr_t {
297  /* Information for H5AC cache functions, _must_ be first field in structure */
298  H5AC_info_t cache_info;
299 
300  /* General header information (stored in header) */
301  unsigned id_len; /* Size of heap IDs (in bytes) */
302  unsigned filter_len; /* Size of I/O filter information (in bytes) */
303 
304  /* Flags for heap settings (stored in status byte in header) */
305  hbool_t debug_objs; /* Is the heap storing objects in 'debug' format */
306  hbool_t write_once; /* Is heap being written in "write once" mode? */
307  hbool_t huge_ids_wrapped; /* Have "huge" object IDs wrapped around? */
308  hbool_t checksum_dblocks; /* Should the direct blocks in the heap be checksummed? */
309 
310  /* Doubling table information (partially stored in header) */
311  /* (Partially set by user, partially derived/updated internally) */
312  H5HF_dtable_t man_dtable; /* Doubling-table info for managed objects */
313 
314  /* Free space information for managed objects (stored in header) */
315  hsize_t total_man_free; /* Total amount of free space in managed blocks */
316  haddr_t fs_addr; /* Address of free space header on disk */
317 
318  /* "Huge" object support (stored in header) */
319  uint32_t max_man_size; /* Max. size of object to manage in doubling table */
320  hsize_t huge_next_id; /* Next ID to use for indirectly tracked 'huge' object */
321  haddr_t huge_bt2_addr; /* Address of v2 B-tree for tracking "huge" object info */
322 
323  /* I/O filter support (stored in header, if any are used) */
324  H5O_pline_t pline; /* I/O filter pipeline for heap objects */
325  size_t pline_root_direct_size; /* Size of filtered root direct block */
326  unsigned pline_root_direct_filter_mask; /* I/O filter mask for filtered root direct block */
327 
328  /* Statistics for heap (stored in header) */
329  hsize_t man_size; /* Total amount of 'managed' space in heap */
330  hsize_t man_alloc_size; /* Total amount of allocated 'managed' space in heap */
331  hsize_t man_iter_off; /* Offset of iterator in 'managed' heap space */
332  hsize_t man_nobjs; /* Number of 'managed' objects in heap */
333  hsize_t huge_size; /* Total size of 'huge' objects in heap */
334  hsize_t huge_nobjs; /* Number of 'huge' objects in heap */
335  hsize_t tiny_size; /* Total size of 'tiny' objects in heap */
336  hsize_t tiny_nobjs; /* Number of 'tiny' objects in heap */
337 
338  /* Cached/computed values (not stored in header) */
339  size_t rc; /* Reference count of heap's components using heap header */
340  haddr_t heap_addr; /* Address of heap header in the file */
341  size_t heap_size; /* Size of heap header in the file */
342  H5AC_protect_t mode; /* Access mode for heap */
343  H5F_t *f; /* Pointer to file for heap */
344  size_t file_rc; /* Reference count of files using heap header */
345  hbool_t pending_delete; /* Heap is pending deletion */
346  uint8_t sizeof_size; /* Size of file sizes */
347  uint8_t sizeof_addr; /* Size of file addresses */
348  struct H5HF_indirect_t *root_iblock; /* Pointer to root indirect block */
349  unsigned root_iblock_flags; /* Flags to indicate whether root indirect block is pinned/protected */
350  H5FS_t *fspace; /* Free space list for objects in heap */
351  H5HF_block_iter_t next_block; /* Block iterator for searching for next block with space */
352  H5B2_t *huge_bt2; /* v2 B-tree handle for huge objects */
353  hsize_t huge_max_id; /* Max. 'huge' heap ID before rolling 'huge' heap IDs over */
354  uint8_t huge_id_size; /* Size of 'huge' heap IDs (in bytes) */
355  hbool_t huge_ids_direct; /* Flag to indicate that 'huge' object's offset & length are stored directly in heap ID */
356  size_t tiny_max_len; /* Max. size of tiny objects for this heap */
357  hbool_t tiny_len_extended; /* Flag to indicate that 'tiny' object's length is stored in extended form (i.e. w/extra byte) */
358  uint8_t heap_off_size; /* Size of heap offsets (in bytes) */
359  uint8_t heap_len_size; /* Size of heap ID lengths (in bytes) */
360  hbool_t checked_filters; /* TRUE if pipeline passes can_apply checks */
361 } H5HF_hdr_t;
362 
363 /* Common indirect block doubling table entry */
364 /* (common between entries pointing to direct & indirect child blocks) */
365 typedef struct H5HF_indirect_ent_t {
366  haddr_t addr; /* Direct block's address */
368 
369 /* Extern indirect block doubling table entry for compressed direct blocks */
370 /* (only exists for indirect blocks in heaps that have I/O filters) */
371 typedef struct H5HF_indirect_filt_ent_t {
372  size_t size; /* Size of child direct block, after passing though I/O filters */
373  unsigned filter_mask; /* Excluded filters for child direct block */
375 
376 /* Fractal heap indirect block */
378  /* Information for H5AC cache functions, _must_ be first field in structure */
379  H5AC_info_t cache_info;
380 
381  /* Internal heap information (not stored) */
382  size_t rc; /* Reference count of objects using this block */
383  H5HF_hdr_t *hdr; /* Shared heap header info */
384  struct H5HF_indirect_t *parent; /* Shared parent indirect block info */
385  unsigned par_entry; /* Entry in parent's table */
386  haddr_t addr; /* Address of this indirect block on disk */
387  size_t size; /* Size of indirect block on disk */
388  unsigned nrows; /* Total # of rows in indirect block */
389  unsigned max_rows; /* Max. # of rows in indirect block */
390  unsigned nchildren; /* Number of child blocks */
391  unsigned max_child; /* Max. offset used in child entries */
392  struct H5HF_indirect_t **child_iblocks; /* Array of pointers to pinned child indirect blocks */
393 
394  /* Stored values */
395  hsize_t block_off; /* Offset of the block within the heap's address space */
396  H5HF_indirect_ent_t *ents; /* Pointer to block entry table */
397  H5HF_indirect_filt_ent_t *filt_ents; /* Pointer to filtered information for direct blocks */
398 };
399 
400 /* A fractal heap direct block */
401 typedef struct H5HF_direct_t {
402  /* Information for H5AC cache functions, _must_ be first field in structure */
403  H5AC_info_t cache_info;
404 
405  /* Internal heap information */
406  H5HF_hdr_t *hdr; /* Shared heap header info */
407  H5HF_indirect_t *parent; /* Shared parent indirect block info */
408  unsigned par_entry; /* Entry in parent's table */
409  size_t size; /* Size of direct block */
410  hsize_t file_size; /* Size of direct block in file (only valid when block's space is being freed) */
411  unsigned blk_off_size; /* Size of offsets in the block */
412  uint8_t *blk; /* Pointer to buffer containing block data */
413 
414  /* Stored values */
415  hsize_t block_off; /* Offset of the block within the heap's address space */
416 } H5HF_direct_t;
417 
418 /* Fractal heap */
419 struct H5HF_t {
420  H5HF_hdr_t *hdr; /* Pointer to internal fractal heap header info */
421  H5F_t *f; /* Pointer to file for heap */
422 };
423 
424 /* Fractal heap "parent info" (for loading a block) */
425 typedef struct H5HF_parent_t {
426  H5HF_hdr_t *hdr; /* Pointer to heap header info */
427  H5HF_indirect_t *iblock; /* Pointer to parent indirect block */
428  unsigned entry; /* Location of block in parent's entry table */
429 } H5HF_parent_t;
430 
431 /* Typedef for indirectly accessed 'huge' object's records in the v2 B-tree */
433  haddr_t addr; /* Address of the object in the file */
434  hsize_t len; /* Length of the object in the file */
435  hsize_t id; /* ID used for object (not used for 'huge' objects directly accessed) */
437 
438 /* Typedef for indirectly accessed, filtered 'huge' object's records in the v2 B-tree */
440  haddr_t addr; /* Address of the filtered object in the file */
441  hsize_t len; /* Length of the filtered object in the file */
442  unsigned filter_mask; /* I/O pipeline filter mask for filtered object in the file */
443  hsize_t obj_size; /* Size of the de-filtered object in memory */
444  hsize_t id; /* ID used for object (not used for 'huge' objects directly accessed) */
446 
447 /* Typedef for directly accessed 'huge' object's records in the v2 B-tree */
448 typedef struct H5HF_huge_bt2_dir_rec_t {
449  haddr_t addr; /* Address of the object in the file */
450  hsize_t len; /* Length of the object in the file */
452 
453 /* Typedef for directly accessed, filtered 'huge' object's records in the v2 B-tree */
455  haddr_t addr; /* Address of the filtered object in the file */
456  hsize_t len; /* Length of the filtered object in the file */
457  unsigned filter_mask; /* I/O pipeline filter mask for filtered object in the file */
458  hsize_t obj_size; /* Size of the de-filtered object in memory */
460 
461 /* User data for free space section 'add' callback */
462 typedef struct {
463  H5HF_hdr_t *hdr; /* Fractal heap header */
464  hid_t dxpl_id; /* DXPL ID for operation */
466 
467 /* User data for v2 B-tree 'remove' callback on 'huge' objects */
468 typedef struct {
469  H5HF_hdr_t *hdr; /* Fractal heap header (in) */
470  hid_t dxpl_id; /* DXPL ID for operation (in) */
471  hsize_t obj_len; /* Length of object removed (out) */
473 
474 /* User data for fractal heap header cache client callback */
475 typedef struct H5HF_hdr_cache_ud_t {
476  H5F_t *f; /* File pointer */
477  hid_t dxpl_id; /* DXPL ID for operation (in) */
479 
480 /* User data for fractal heap indirect block cache client callbacks */
481 typedef struct H5HF_iblock_cache_ud_t {
482  H5HF_parent_t * par_info; /* Parent info */
483  H5F_t * f; /* File pointer */
484  const unsigned *nrows; /* Number of rows */
486 
487 /* User data for fractal heap direct block cache client callbacks */
488 typedef struct H5HF_dblock_cache_ud_t {
489  H5HF_parent_t par_info; /* Parent info */
490  H5F_t * f; /* File pointer */
491  size_t odi_size; /* On disk image size of the direct block.
492  * Note that there is no necessary relation
493  * between this value, and the actual
494  * direct block size, as conpression may
495  * reduce the size of the on disk image,
496  * and check sums may increase it.
497  */
498  size_t dblock_size; /* size of the direct block, which bears
499  * no necessary relation to the block
500  * odi_size -- the size of the on disk
501  * image of the block. Note that the
502  * metadata cache is only interested
503  * in the odi_size, and thus it is this
504  * value that is passed to the cache in
505  * calls to it.
506  */
507  unsigned filter_mask; /* Excluded filters for direct block */
509 
510 
511 /*****************************/
512 /* Package Private Variables */
513 /*****************************/
514 
515 /* H5HF header inherits cache-like properties from H5AC */
516 H5_DLLVAR const H5AC_class_t H5AC_FHEAP_HDR[1];
517 
518 /* H5HF indirect block inherits cache-like properties from H5AC */
519 H5_DLLVAR const H5AC_class_t H5AC_FHEAP_IBLOCK[1];
520 
521 /* H5HF direct block inherits cache-like properties from H5AC */
522 H5_DLLVAR const H5AC_class_t H5AC_FHEAP_DBLOCK[1];
523 
524 /* The v2 B-tree class for tracking indirectly accessed 'huge' objects */
525 H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_INDIR[1];
526 
527 /* The v2 B-tree class for tracking indirectly accessed filtered 'huge' objects */
528 H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_FILT_INDIR[1];
529 
530 /* The v2 B-tree class for tracking directly accessed 'huge' objects */
531 H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_DIR[1];
532 
533 /* The v2 B-tree class for tracking directly accessed filtered 'huge' objects */
534 H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_FILT_DIR[1];
535 
536 /* H5HF single section inherits serializable properties from H5FS_section_class_t */
537 H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_SINGLE[1];
538 
539 /* H5HF 'first' row section inherits serializable properties from H5FS_section_class_t */
541 
542 /* H5HF 'normal' row section inherits serializable properties from H5FS_section_class_t */
544 
545 /* H5HF indirect section inherits serializable properties from H5FS_section_class_t */
546 H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_INDIRECT[1];
547 
548 /* Declare a free list to manage the H5HF_indirect_t struct */
550 
551 /* Declare a free list to manage the H5HF_indirect_ent_t sequence information */
553 
554 /* Declare a free list to manage the H5HF_indirect_filt_ent_t sequence information */
556 
557 /* Declare a free list to manage the H5HF_indirect_t * sequence information */
560 
561 /* Declare a free list to manage the H5HF_direct_t struct */
563 
564 /* Declare a free list to manage heap direct block data to/from disk */
565 H5FL_BLK_EXTERN(direct_block);
566 
567 
568 /******************************/
569 /* Package Private Prototypes */
570 /******************************/
571 
572 /* Doubling table routines */
576  unsigned *row, unsigned *col);
577 H5_DLL unsigned H5HF_dtable_size_to_row(const H5HF_dtable_t *dtable, size_t block_size);
578 H5_DLL unsigned H5HF_dtable_size_to_rows(const H5HF_dtable_t *dtable, hsize_t size);
579 H5_DLL hsize_t H5HF_dtable_span_size(const H5HF_dtable_t *dtable, unsigned start_row,
580  unsigned start_col, unsigned num_entries);
581 
582 /* Heap header routines */
584 H5_DLL haddr_t H5HF_hdr_create(H5F_t *f, hid_t dxpl_id, const H5HF_create_t *cparam);
586  H5AC_protect_t rw);
596 H5_DLL herr_t H5HF_hdr_adjust_heap(H5HF_hdr_t *hdr, hsize_t new_size, hssize_t extra_free);
597 H5_DLL herr_t H5HF_hdr_inc_alloc(H5HF_hdr_t *hdr, size_t alloc_size);
598 H5_DLL herr_t H5HF_hdr_start_iter(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, hsize_t curr_off, unsigned curr_entry);
600  H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries);
601 H5_DLL herr_t H5HF_hdr_update_iter(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_size);
602 H5_DLL herr_t H5HF_hdr_inc_iter(H5HF_hdr_t *hdr, hsize_t adv_size, unsigned nentries);
604  haddr_t dblock_addr);
610 
611 /* Indirect block routines */
616  size_t min_dblock_size);
618  size_t min_dblock_size);
620  H5HF_free_section_t **sec_node);
622  H5HF_indirect_t *par_iblock, unsigned par_entry, unsigned nrows,
623  unsigned max_rows, haddr_t *addr_p);
625  haddr_t iblock_addr, unsigned iblock_nrows,
626  H5HF_indirect_t *par_iblock, unsigned par_entry, hbool_t must_protect,
627  H5AC_protect_t rw, hbool_t *did_protect);
629  unsigned cache_flags, hbool_t did_protect);
630 H5_DLL herr_t H5HF_man_iblock_attach(H5HF_indirect_t *iblock, unsigned entry,
631  haddr_t dblock_addr);
632 H5_DLL herr_t H5HF_man_iblock_detach(H5HF_indirect_t *iblock, hid_t dxpl_id, unsigned entry);
634  haddr_t *child_addr);
636  haddr_t iblock_addr, unsigned iblock_nrows, H5HF_indirect_t *par_iblock,
637  unsigned par_entry);
639  haddr_t iblock_addr, unsigned nrows, H5HF_indirect_t *par_iblock, unsigned par_entry, hsize_t *heap_size/*out*/);
641 
642 /* Direct block routines */
643 H5_DLL herr_t H5HF_man_dblock_new(H5HF_hdr_t *fh, hid_t dxpl_id, size_t request,
644  H5HF_free_section_t **ret_sec_node);
646  H5HF_indirect_t *par_iblock, unsigned par_entry, haddr_t *addr_p,
647  H5HF_free_section_t **ret_sec_node);
649  H5HF_direct_t *dblock, haddr_t dblock_addr);
651  haddr_t dblock_addr, size_t dblock_size,
652  H5HF_indirect_t *par_iblock, unsigned par_entry,
653  H5AC_protect_t rw);
655  hsize_t obj_off, H5HF_indirect_t **par_iblock,
656  unsigned *par_entry, hbool_t *par_did_protect, H5AC_protect_t rw);
657 H5_DLL herr_t H5HF_man_dblock_delete(H5F_t *f, hid_t dxpl_id, haddr_t dblock_addr,
658  hsize_t dblock_size);
660 
661 /* Managed object routines */
662 H5_DLL herr_t H5HF_man_insert(H5HF_hdr_t *fh, hid_t dxpl_id, size_t obj_size,
663  const void *obj, void *id);
664 H5_DLL herr_t H5HF_man_read(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id,
665  void *obj);
666 H5_DLL herr_t H5HF_man_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
667  const void *obj);
668 H5_DLL herr_t H5HF_man_op(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
669  H5HF_operator_t op, void *op_data);
670 H5_DLL herr_t H5HF_man_remove(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id);
671 
672 /* 'Huge' object routines */
674 H5_DLL herr_t H5HF_huge_insert(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t obj_size,
675  void *obj, void *id);
677  const uint8_t *id, size_t *obj_len_p);
678 H5_DLL herr_t H5HF_huge_read(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id,
679  void *obj);
680 H5_DLL herr_t H5HF_huge_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
681  const void *obj);
682 H5_DLL herr_t H5HF_huge_op(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id,
683  H5HF_operator_t op, void *op_data);
684 H5_DLL herr_t H5HF_huge_remove(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id);
687 
688 /* 'Huge' object v2 B-tree function callbacks */
689 H5_DLL herr_t H5HF_huge_bt2_indir_found(const void *nrecord, void *op_data);
690 H5_DLL herr_t H5HF_huge_bt2_indir_remove(const void *nrecord, void *op_data);
691 H5_DLL herr_t H5HF_huge_bt2_filt_indir_found(const void *nrecord, void *op_data);
692 H5_DLL herr_t H5HF_huge_bt2_filt_indir_remove(const void *nrecord, void *op_data);
693 H5_DLL herr_t H5HF_huge_bt2_dir_remove(const void *nrecord, void *op_data);
694 H5_DLL herr_t H5HF_huge_bt2_filt_dir_found(const void *nrecord, void *op_data);
695 H5_DLL herr_t H5HF_huge_bt2_filt_dir_remove(const void *nrecord, void *op_data);
696 
697 /* 'Tiny' object routines */
699 H5_DLL herr_t H5HF_tiny_insert(H5HF_hdr_t *hdr, size_t obj_size, const void *obj,
700  void *id);
701 H5_DLL herr_t H5HF_tiny_get_obj_len(H5HF_hdr_t *hdr, const uint8_t *id,
702  size_t *obj_len_p);
703 H5_DLL herr_t H5HF_tiny_read(H5HF_hdr_t *fh, const uint8_t *id, void *obj);
704 H5_DLL herr_t H5HF_tiny_op(H5HF_hdr_t *hdr, const uint8_t *id,
705  H5HF_operator_t op, void *op_data);
706 H5_DLL herr_t H5HF_tiny_remove(H5HF_hdr_t *fh, const uint8_t *id);
707 
708 /* Debugging routines for dumping file structures */
709 H5_DLL void H5HF_hdr_print(const H5HF_hdr_t *hdr, hid_t dxpl_id,
710  hbool_t dump_internal, FILE *stream, int indent, int fwidth);
711 H5_DLL herr_t H5HF_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr,
712  FILE *stream, int indent, int fwidth);
714  FILE *stream, int indent, int fwidth, haddr_t hdr_addr, size_t nrec);
715 H5_DLL void H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal,
716  FILE *stream, int indent, int fwidth);
718  FILE *stream, int indent, int fwidth, haddr_t hdr_addr, unsigned nrows);
719 
720 /* Block iteration routines */
725  H5HF_indirect_t *iblock, unsigned start_entry);
727  H5HF_block_iter_t *biter, unsigned entry);
729  unsigned nentries);
733 H5_DLL herr_t H5HF_man_iter_curr(H5HF_block_iter_t *biter, unsigned *row, unsigned *col,
734  unsigned *entry, H5HF_indirect_t **block);
736  hsize_t *offset);
738 
739 /* Free space manipulation routines */
740 H5_DLL herr_t H5HF_space_start(H5HF_hdr_t *hdr, hid_t dxpl_id, hbool_t may_create);
742  H5HF_free_section_t *node, unsigned flags);
743 H5_DLL htri_t H5HF_space_find(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t request,
744  H5HF_free_section_t **node);
747  H5HF_indirect_t *root_iblock);
748 H5_DLL herr_t H5HF_space_size(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t *fs_size);
750  H5HF_free_section_t *node);
754  H5HF_free_section_t *sect, unsigned new_class);
755 
756 /* Free space section routines */
758  size_t sect_size, H5HF_indirect_t *parent, unsigned par_entry);
760  H5HF_free_section_t *sect);
762  H5HF_free_section_t *sect, haddr_t *dblock_addr, size_t *dblock_size);
764  H5HF_free_section_t *sect, size_t amt);
766  H5HF_free_section_t *sect);
768  H5HF_free_section_t *sect, unsigned *entry_p);
771  H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries);
772 H5_DLL herr_t H5HF_sect_single_free(H5FS_section_info_t *sect);
773 
774 /* Internal operator callbacks */
775 H5_DLL herr_t H5HF_op_read(const void *obj, size_t obj_len, void *op_data);
776 H5_DLL herr_t H5HF_op_write(const void *obj, size_t obj_len, void *op_data);
777 
778 /* Testing routines */
779 #ifdef H5HF_TESTING
780 H5_DLL herr_t H5HF_get_cparam_test(const H5HF_t *fh, H5HF_create_t *cparam);
781 H5_DLL int H5HF_cmp_cparam_test(const H5HF_create_t *cparam1, const H5HF_create_t *cparam2);
782 H5_DLL unsigned H5HF_get_max_root_rows(const H5HF_t *fh);
783 H5_DLL unsigned H5HF_get_dtable_width_test(const H5HF_t *fh);
784 H5_DLL unsigned H5HF_get_dtable_max_drows_test(const H5HF_t *fh);
785 H5_DLL unsigned H5HF_get_iblock_max_drows_test(const H5HF_t *fh, unsigned pos);
786 H5_DLL hsize_t H5HF_get_dblock_size_test(const H5HF_t *fh, unsigned row);
787 H5_DLL hsize_t H5HF_get_dblock_free_test(const H5HF_t *fh, unsigned row);
788 H5_DLL herr_t H5HF_get_id_off_test(const H5HF_t *fh, const void *id, hsize_t *obj_off);
789 H5_DLL herr_t H5HF_get_id_type_test(const void *id, unsigned char *obj_type);
790 H5_DLL herr_t H5HF_get_tiny_info_test(const H5HF_t *fh, size_t *max_len,
791  hbool_t *len_extended);
792 H5_DLL herr_t H5HF_get_huge_info_test(const H5HF_t *fh, hsize_t *next_id,
793  hbool_t *ids_direct);
794 #endif /* H5HF_TESTING */
795 
796 #endif /* _H5HFpkg_H */
797 
union H5HF_free_section_t::@28::@31::@32 u
H5_DLL herr_t H5HF_sect_row_revive(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sect)
H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_NORMAL_ROW[1]
Definition: H5HFpkg.h:543
H5_DLL herr_t H5HF_op_write(const void *obj, size_t obj_len, void *op_data)
H5_DLL herr_t H5HF_sect_single_dblock_info(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sect, haddr_t *dblock_addr, size_t *dblock_size)
haddr_t table_addr
Definition: H5HFpkg.h:190
H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_FILT_INDIR[1]
Definition: H5HFpkg.h:528
H5_DLL herr_t H5HF_op_read(const void *obj, size_t obj_len, void *op_data)
unsigned nrows
Definition: H5HFpkg.h:388
H5HF_indirect_filt_ent_t * filt_ents
Definition: H5HFpkg.h:397
H5HF_hdr_t * hdr
Definition: H5HFpkg.h:420
unsigned max_child
Definition: H5HFpkg.h:391
H5F_t * f
Definition: H5HFpkg.h:343
H5HF_indirect_t * parent
Definition: H5HFpkg.h:407
struct H5HF_hdr_cache_ud_t H5HF_hdr_cache_ud_t
struct H5HF_huge_bt2_filt_dir_rec_t H5HF_huge_bt2_filt_dir_rec_t
H5_DLL herr_t H5HF_man_op(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id, H5HF_operator_t op, void *op_data)
H5_DLL herr_t H5HF_man_iter_down(H5HF_block_iter_t *biter, H5HF_indirect_t *iblock)
H5_DLL herr_t H5HF_man_iter_offset(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter, hsize_t *offset)
H5_DLL H5HF_hdr_t * H5HF_hdr_alloc(H5F_t *f)
H5_DLL herr_t H5HF_hdr_reverse_iter(H5HF_hdr_t *hdr, hid_t dxpl_id, haddr_t dblock_addr)
hsize_t num_id_first_row
Definition: H5HFpkg.h:205
H5HF_hdr_t * hdr
Definition: H5HFpkg.h:463
unsigned max_direct_bits
Definition: H5HFpkg.h:202
struct H5HF_free_section_t H5HF_free_section_t
unsigned par_entry
Definition: H5HFpkg.h:252
H5_DLL herr_t H5HF_man_iblock_entry_addr(H5HF_indirect_t *iblock, unsigned entry, haddr_t *child_addr)
unsigned int hbool_t
Definition: H5public.h:142
H5_DLL herr_t H5HF_hdr_update_iter(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_size)
H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_SINGLE[1]
Definition: H5HFpkg.h:537
H5_DLL herr_t H5HF_man_iter_reset(H5HF_block_iter_t *biter)
H5_DLL herr_t H5HF_man_iter_start_entry(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter, H5HF_indirect_t *iblock, unsigned start_entry)
HDFFCLIBAPI intf * block_size
H5_DLL herr_t H5HF_man_insert(H5HF_hdr_t *fh, hid_t dxpl_id, size_t obj_size, const void *obj, void *id)
unsigned blk_off_size
Definition: H5HFpkg.h:411
H5_DLL void H5HF_hdr_print(const H5HF_hdr_t *hdr, hid_t dxpl_id, hbool_t dump_internal, FILE *stream, int indent, int fwidth)
H5_DLL herr_t H5HF_space_remove(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *node)
uint8_t heap_len_size
Definition: H5HFpkg.h:359
H5_DLL herr_t H5HF_hdr_reset_iter(H5HF_hdr_t *hdr, hsize_t curr_off)
H5_DLL herr_t H5HF_huge_op(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id, H5HF_operator_t op, void *op_data)
H5_DLL herr_t H5HF_space_size(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t *fs_size)
H5_DLL herr_t H5HF_man_dblock_dest(H5HF_direct_t *dblock)
HDFFCLIBAPI intf intf intf intf * nentries
H5B2_t * huge_bt2
Definition: H5HFpkg.h:352
H5HF_indirect_t * context
Definition: H5HFpkg.h:236
unsigned entry
Definition: H5HFpkg.h:233
hsize_t man_iter_off
Definition: H5HFpkg.h:331
struct H5HF_huge_bt2_filt_indir_rec_t H5HF_huge_bt2_filt_indir_rec_t
H5_DLL herr_t H5HF_man_dblock_delete(H5F_t *f, hid_t dxpl_id, haddr_t dblock_addr, hsize_t dblock_size)
H5HF_dtable_t man_dtable
Definition: H5HFpkg.h:312
size_t size
Definition: H5HFpkg.h:387
H5_DLL herr_t H5HF_dblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth, haddr_t hdr_addr, size_t nrec)
H5_DLL herr_t H5HF_huge_bt2_filt_dir_found(const void *nrecord, void *op_data)
struct H5HF_indirect_filt_ent_t H5HF_indirect_filt_ent_t
unsigned iblock_entries
Definition: H5HFpkg.h:282
H5_DLL herr_t H5HF_huge_get_obj_len(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id, size_t *obj_len_p)
struct H5HF_free_section_t * under
Definition: H5HFpkg.h:255
H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_DIR[1]
Definition: H5HFpkg.h:531
H5_DLL herr_t H5HF_huge_delete(H5HF_hdr_t *hdr, hid_t dxpl_id)
H5_DLL herr_t H5HF_man_read(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id, void *obj)
long long ssize_t
Definition: H5public.h:156
struct H5HF_indirect_ent_t H5HF_indirect_ent_t
hsize_t man_nobjs
Definition: H5HFpkg.h:332
#define H5_DLL
Definition: H5api_adpt.h:256
H5_DLL herr_t H5HF_huge_bt2_dir_remove(const void *nrecord, void *op_data)
H5_DLL herr_t H5HF_man_dblock_locate(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t obj_off, H5HF_indirect_t **par_iblock, unsigned *par_entry, hbool_t *par_did_protect, H5AC_protect_t rw)
H5_DLL herr_t H5HF_man_iter_start_offset(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_block_iter_t *biter, hsize_t offset)
int herr_t
Definition: H5public.h:124
H5HF_hdr_t * hdr
Definition: H5HFpkg.h:406
H5_DLL H5HF_free_section_t * H5HF_sect_single_new(hsize_t sect_off, size_t sect_size, H5HF_indirect_t *parent, unsigned par_entry)
H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_FIRST_ROW[1]
Definition: H5HFpkg.h:540
H5_DLL herr_t H5HF_tiny_read(H5HF_hdr_t *fh, const uint8_t *id, void *obj)
size_t pline_root_direct_size
Definition: H5HFpkg.h:325
H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_INDIR[1]
Definition: H5HFpkg.h:525
struct H5HF_free_section_t * parent
Definition: H5HFpkg.h:279
H5_DLL herr_t H5HF_space_sect_change_class(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sect, unsigned new_class)
H5_DLL herr_t H5HF_hdr_decr(H5HF_hdr_t *hdr)
size_t size
Definition: H5HFpkg.h:409
H5_DLL herr_t H5HF_man_dblock_create(hid_t dxpl_id, H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblock, unsigned par_entry, haddr_t *addr_p, H5HF_free_section_t **ret_sec_node)
H5_DLL herr_t H5HF_dtable_lookup(const H5HF_dtable_t *dtable, hsize_t off, unsigned *row, unsigned *col)
H5_DLL herr_t H5HF_hdr_inc_alloc(H5HF_hdr_t *hdr, size_t alloc_size)
H5_DLL herr_t H5HF_hdr_free(H5HF_hdr_t *hdr)
unsigned max_dir_blk_off_size
Definition: H5HFpkg.h:203
H5HF_indirect_t * parent
Definition: H5HFpkg.h:251
H5FS_t * fspace
Definition: H5HFpkg.h:350
H5_DLL herr_t H5HF_huge_read(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id, void *obj)
struct H5HF_dtable_t H5HF_dtable_t
H5_DLL herr_t H5HF_iblock_dirty(H5HF_indirect_t *iblock)
H5FL_EXTERN(H5HF_indirect_t)
H5_DLL herr_t H5HF_hdr_start_iter(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, hsize_t curr_off, unsigned curr_entry)
struct H5HF_huge_bt2_indir_rec_t H5HF_huge_bt2_indir_rec_t
H5FL_BLK_EXTERN(direct_block)
H5_DLL herr_t H5HF_hdr_dirty(H5HF_hdr_t *hdr)
unsigned long long hsize_t
Definition: H5public.h:169
uint8_t sizeof_size
Definition: H5HFpkg.h:346
unsigned pline_root_direct_filter_mask
Definition: H5HFpkg.h:326
struct H5HF_freelist_t H5HF_freelist_t
Definition: H5HFpkg.h:221
H5_DLL herr_t H5HF_man_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id, const void *obj)
H5_DLL herr_t H5HF_hdr_skip_blocks(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries)
struct H5HF_huge_bt2_dir_rec_t H5HF_huge_bt2_dir_rec_t
H5_DLL herr_t H5HF_tiny_insert(H5HF_hdr_t *hdr, size_t obj_size, const void *obj, void *id)
hsize_t man_size
Definition: H5HFpkg.h:329
H5_DLL haddr_t H5HF_hdr_create(H5F_t *f, hid_t dxpl_id, const H5HF_create_t *cparam)
H5HF_hdr_t * hdr
Definition: H5HFpkg.h:383
hbool_t write_once
Definition: H5HFpkg.h:306
H5_DLL herr_t H5HF_iblock_decr(H5HF_indirect_t *iblock)
H5O_pline_t pline
Definition: H5HFpkg.h:324
H5_DLL herr_t H5HF_tiny_init(H5HF_hdr_t *hdr)
hbool_t debug_objs
Definition: H5HFpkg.h:305
H5_DLL herr_t H5HF_tiny_op(H5HF_hdr_t *hdr, const uint8_t *id, H5HF_operator_t op, void *op_data)
H5_DLL herr_t H5HF_space_add(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *node, unsigned flags)
H5HF_indirect_t * iblock
Definition: H5HFpkg.h:271
H5_DLL herr_t H5HF_dtable_dest(H5HF_dtable_t *dtable)
struct H5HF_free_section_t::@28::@31 indirect
size_t rc
Definition: H5HFpkg.h:339
struct H5HF_indirect_t * root_iblock
Definition: H5HFpkg.h:348
hsize_t block_off
Definition: H5HFpkg.h:395
H5_DLL herr_t H5HF_huge_init(H5HF_hdr_t *hdr)
struct H5HF_iblock_cache_ud_t H5HF_iblock_cache_ud_t
H5AC_protect_t mode
Definition: H5HFpkg.h:342
H5_DLLVAR const H5AC_class_t H5AC_FHEAP_IBLOCK[1]
Definition: H5HFpkg.h:519
H5_DLL herr_t H5HF_huge_write(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id, const void *obj)
H5_DLL herr_t H5HF_sect_row_reduce(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sect, unsigned *entry_p)
H5_DLL herr_t H5HF_space_delete(H5HF_hdr_t *hdr, hid_t dxpl_id)
H5HF_block_iter_t next_block
Definition: H5HFpkg.h:351
H5_DLL herr_t H5HF_man_iter_set_entry(const H5HF_hdr_t *hdr, H5HF_block_iter_t *biter, unsigned entry)
H5_DLL herr_t H5HF_huge_bt2_filt_dir_remove(const void *nrecord, void *op_data)
uint64_t haddr_t
Definition: H5public.h:182
haddr_t heap_addr
Definition: H5HFpkg.h:340
hsize_t * row_tot_dblock_free
Definition: H5HFpkg.h:208
struct H5HF_parent_t H5HF_parent_t
hbool_t huge_ids_wrapped
Definition: H5HFpkg.h:307
unsigned par_entry
Definition: H5HFpkg.h:385
hsize_t huge_max_id
Definition: H5HFpkg.h:353
H5_DLL herr_t H5HF_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth)
H5AC_info_t cache_info
Definition: H5HFpkg.h:298
H5_DLL H5HF_indirect_t * H5HF_sect_row_get_iblock(H5HF_free_section_t *sect)
hbool_t checked_filters
Definition: H5HFpkg.h:360
H5_DLL herr_t H5HF_man_iblock_root_create(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_size)
H5_DLL htri_t H5HF_space_find(H5HF_hdr_t *hdr, hid_t dxpl_id, hsize_t request, H5HF_free_section_t **node)
H5_DLL herr_t H5HF_hdr_fuse_incr(H5HF_hdr_t *hdr)
unsigned start_bits
Definition: H5HFpkg.h:201
H5_DLL herr_t H5HF_sect_single_free(H5FS_section_info_t *sect)
H5HF_parent_t par_info
Definition: H5HFpkg.h:489
H5_DLL unsigned H5HF_dtable_size_to_row(const H5HF_dtable_t *dtable, size_t block_size)
unsigned max_root_rows
Definition: H5HFpkg.h:199
unsigned row
Definition: H5HFpkg.h:229
hsize_t file_size
Definition: H5HFpkg.h:410
H5AC_info_t cache_info
Definition: H5HFpkg.h:379
H5_DLL herr_t H5HF_man_iblock_unprotect(H5HF_indirect_t *iblock, hid_t dxpl_id, unsigned cache_flags, hbool_t did_protect)
hbool_t ready
Definition: H5HFpkg.h:242
H5_DLL herr_t H5HF_sect_single_revive(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sect)
HDFFCLIBAPI intf * size
int hid_t
Definition: H5Ipublic.h:54
H5HF_parent_t * par_info
Definition: H5HFpkg.h:482
uint8_t huge_id_size
Definition: H5HFpkg.h:354
hsize_t iblock_off
Definition: H5HFpkg.h:272
H5_DLL herr_t H5HF_man_iblock_detach(H5HF_indirect_t *iblock, hid_t dxpl_id, unsigned entry)
H5_DLL herr_t H5HF_space_start(H5HF_hdr_t *hdr, hid_t dxpl_id, hbool_t may_create)
unsigned indir_nents
Definition: H5HFpkg.h:286
H5_DLL H5HF_hdr_t * H5HF_hdr_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
hsize_t block_off
Definition: H5HFpkg.h:415
haddr_t addr
Definition: H5HFpkg.h:386
H5_DLL herr_t H5HF_hdr_adjust_heap(H5HF_hdr_t *hdr, hsize_t new_size, hssize_t extra_free)
H5_DLL herr_t H5HF_hdr_adj_free(H5HF_hdr_t *hdr, ssize_t amt)
H5HF_hdr_t * hdr
Definition: H5HFpkg.h:469
struct H5HF_indirect_t ** child_iblocks
Definition: H5HFpkg.h:392
H5_DLL herr_t H5HF_hdr_empty(H5HF_hdr_t *hdr)
H5_DLLVAR const H5B2_class_t H5HF_HUGE_BT2_FILT_DIR[1]
Definition: H5HFpkg.h:534
hsize_t man_alloc_size
Definition: H5HFpkg.h:330
H5_DLL herr_t H5HF_huge_bt2_filt_indir_found(const void *nrecord, void *op_data)
H5_DLL herr_t H5HF_man_dblock_new(H5HF_hdr_t *fh, hid_t dxpl_id, size_t request, H5HF_free_section_t **ret_sec_node)
uint8_t heap_off_size
Definition: H5HFpkg.h:358
uint8_t sizeof_addr
Definition: H5HFpkg.h:347
struct H5HF_direct_t H5HF_direct_t
struct H5HF_block_loc_t * up
Definition: H5HFpkg.h:237
unsigned filter_len
Definition: H5HFpkg.h:302
H5_DLL herr_t H5HF_hdr_dest(H5HF_hdr_t *hdr)
H5_DLL herr_t H5HF_huge_bt2_filt_indir_remove(const void *nrecord, void *op_data)
H5_DLL herr_t H5HF_man_iblock_alloc_row(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t **sec_node)
unsigned entry
Definition: H5HFpkg.h:428
hbool_t checksum_dblocks
Definition: H5HFpkg.h:308
H5_DLL herr_t H5HF_hdr_incr(H5HF_hdr_t *hdr)
struct H5HF_indirect_t * parent
Definition: H5HFpkg.h:384
haddr_t huge_bt2_addr
Definition: H5HFpkg.h:321
size_t tiny_max_len
Definition: H5HFpkg.h:356
struct H5HF_block_iter_t H5HF_block_iter_t
H5FL_SEQ_EXTERN(H5HF_indirect_ent_t)
hbool_t pending_delete
Definition: H5HFpkg.h:345
unsigned nchildren
Definition: H5HFpkg.h:390
H5_DLL herr_t H5HF_man_iblock_size(H5F_t *f, hid_t dxpl_id, H5HF_hdr_t *hdr, haddr_t iblock_addr, unsigned nrows, H5HF_indirect_t *par_iblock, unsigned par_entry, hsize_t *heap_size)
H5HF_indirect_t * iblock
Definition: H5HFpkg.h:427
unsigned id_len
Definition: H5HFpkg.h:301
H5_DLL herr_t H5HF_space_close(H5HF_hdr_t *hdr, hid_t dxpl_id)
H5_DLL herr_t H5HF_man_dblock_destroy(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_direct_t *dblock, haddr_t dblock_addr)
H5_DLL herr_t H5HF_iblock_incr(H5HF_indirect_t *iblock)
H5_DLL unsigned H5HF_dtable_size_to_rows(const H5HF_dtable_t *dtable, hsize_t size)
H5_DLL herr_t H5HF_sect_indirect_add(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries)
H5_DLL H5HF_indirect_t * H5HF_man_iblock_protect(H5HF_hdr_t *hdr, hid_t dxpl_id, haddr_t iblock_addr, unsigned iblock_nrows, H5HF_indirect_t *par_iblock, unsigned par_entry, hbool_t must_protect, H5AC_protect_t rw, hbool_t *did_protect)
unsigned max_direct_rows
Definition: H5HFpkg.h:200
const unsigned * nrows
Definition: H5HFpkg.h:484
struct H5HF_hdr_t H5HF_hdr_t
H5_DLL void H5HF_iblock_print(const H5HF_indirect_t *iblock, hbool_t dump_internal, FILE *stream, int indent, int fwidth)
uint8_t * blk
Definition: H5HFpkg.h:412
hsize_t tiny_size
Definition: H5HFpkg.h:335
unsigned curr_root_rows
Definition: H5HFpkg.h:192
size_t file_rc
Definition: H5HFpkg.h:344
H5_DLL herr_t H5HF_man_iblock_root_double(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_size)
H5_DLL herr_t H5HF_sect_single_reduce(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sect, size_t amt)
hsize_t * row_block_size
Definition: H5HFpkg.h:206
H5_DLL hbool_t H5HF_man_iter_ready(H5HF_block_iter_t *biter)
signed long long hssize_t
Definition: H5public.h:170
struct H5HF_free_section_t ** indir_ents
Definition: H5HFpkg.h:287
hbool_t tiny_len_extended
Definition: H5HFpkg.h:357
struct H5HF_dblock_cache_ud_t H5HF_dblock_cache_ud_t
H5_DLL herr_t H5HF_huge_bt2_indir_remove(const void *nrecord, void *op_data)
H5_DLL herr_t H5HF_tiny_remove(H5HF_hdr_t *fh, const uint8_t *id)
H5HF_block_loc_t * curr
Definition: H5HFpkg.h:243
HDFFCLIBAPI intf intf * flags
unsigned dir_nrows
Definition: H5HFpkg.h:284
size_t heap_size
Definition: H5HFpkg.h:341
H5_DLL herr_t H5HF_man_iblock_delete(H5HF_hdr_t *hdr, hid_t dxpl_id, haddr_t iblock_addr, unsigned iblock_nrows, H5HF_indirect_t *par_iblock, unsigned par_entry)
H5HF_indirect_t * H5HF_indirect_ptr_t
Definition: H5HFpkg.h:558
unsigned first_row_bits
Definition: H5HFpkg.h:204
H5_DLL hsize_t H5HF_dtable_span_size(const H5HF_dtable_t *dtable, unsigned start_row, unsigned start_col, unsigned num_entries)
#define H5_DLLVAR
Definition: H5api_adpt.h:257
struct H5HF_block_loc_t H5HF_block_loc_t
H5_DLL herr_t H5HF_man_iter_init(H5HF_block_iter_t *biter)
H5_DLL herr_t H5HF_man_iblock_attach(H5HF_indirect_t *iblock, unsigned entry, haddr_t dblock_addr)
hsize_t total_man_free
Definition: H5HFpkg.h:315
unsigned par_entry
Definition: H5HFpkg.h:408
H5_DLLVAR const H5AC_class_t H5AC_FHEAP_HDR[1]
Definition: H5HFpkg.h:516
hbool_t checked_out
Definition: H5HFpkg.h:261
struct H5HF_free_section_t ** dir_rows
Definition: H5HFpkg.h:285
H5_DLL herr_t H5HF_hdr_inc_iter(H5HF_hdr_t *hdr, hsize_t adv_size, unsigned nentries)
H5F_t * f
Definition: H5HFpkg.h:421
unsigned col
Definition: H5HFpkg.h:230
size_t * row_max_dblock_free
Definition: H5HFpkg.h:213
H5_DLL herr_t H5HF_iblock_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth, haddr_t hdr_addr, unsigned nrows)
H5AC_info_t cache_info
Definition: H5HFpkg.h:403
H5_DLL herr_t H5HF_hdr_delete(H5HF_hdr_t *hdr, hid_t dxpl_id)
H5_DLLVAR const H5AC_class_t H5AC_FHEAP_DBLOCK[1]
Definition: H5HFpkg.h:522
hsize_t huge_next_id
Definition: H5HFpkg.h:320
H5_DLLVAR H5FS_section_class_t H5HF_FSPACE_SECT_CLS_INDIRECT[1]
Definition: H5HFpkg.h:546
H5_DLL herr_t H5HF_huge_term(H5HF_hdr_t *hdr, hid_t dxpl_id)
H5_DLL herr_t H5HF_man_iter_curr(H5HF_block_iter_t *biter, unsigned *row, unsigned *col, unsigned *entry, H5HF_indirect_t **block)
HDFFCLIBAPI intf * offset
H5HF_dtable_cparam_t cparam
Definition: H5HFpkg.h:187
H5_DLL herr_t H5HF_man_iblock_create(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_indirect_t *par_iblock, unsigned par_entry, unsigned nrows, unsigned max_rows, haddr_t *addr_p)
uint32_t max_man_size
Definition: H5HFpkg.h:319
int htri_t
Definition: H5public.h:143
H5_DLL herr_t H5HF_man_iter_up(H5HF_block_iter_t *biter)
unsigned filter_mask
Definition: H5HFpkg.h:507
H5_DLL herr_t H5HF_hdr_finish_init_phase1(H5HF_hdr_t *hdr)
H5_DLL H5HF_direct_t * H5HF_man_dblock_protect(H5HF_hdr_t *hdr, hid_t dxpl_id, haddr_t dblock_addr, size_t dblock_size, H5HF_indirect_t *par_iblock, unsigned par_entry, H5AC_protect_t rw)
hsize_t huge_size
Definition: H5HFpkg.h:333
H5_DLL size_t H5HF_hdr_fuse_decr(H5HF_hdr_t *hdr)
hsize_t * row_block_off
Definition: H5HFpkg.h:207
unsigned max_rows
Definition: H5HFpkg.h:389
hsize_t huge_nobjs
Definition: H5HFpkg.h:334
H5_DLL herr_t H5HF_hdr_finish_init_phase2(H5HF_hdr_t *hdr)
unsigned num_entries
Definition: H5HFpkg.h:258
hsize_t span_size
Definition: H5HFpkg.h:281
H5_DLL herr_t H5HF_huge_remove(H5HF_hdr_t *fh, hid_t dxpl_id, const uint8_t *id)
H5_DLL herr_t H5HF_man_remove(H5HF_hdr_t *hdr, hid_t dxpl_id, const uint8_t *id)
haddr_t fs_addr
Definition: H5HFpkg.h:316
H5_DLL herr_t H5HF_hdr_finish_init(H5HF_hdr_t *hdr)
H5FS_section_info_t sect_info
Definition: H5HFpkg.h:248
H5_DLL herr_t H5HF_tiny_get_obj_len(H5HF_hdr_t *hdr, const uint8_t *id, size_t *obj_len_p)
unsigned root_iblock_flags
Definition: H5HFpkg.h:349
hsize_t tiny_nobjs
Definition: H5HFpkg.h:336
H5HF_indirect_ent_t * ents
Definition: H5HFpkg.h:396
H5HF_hdr_t * hdr
Definition: H5HFpkg.h:426
H5_DLL herr_t H5HF_huge_insert(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t obj_size, void *obj, void *id)
H5_DLL herr_t H5HF_space_revert_root(const H5HF_hdr_t *hdr, hid_t dxpl_id)
H5_DLL herr_t H5HF_man_iblock_dest(H5HF_indirect_t *iblock)
H5_DLL herr_t H5HF_space_create_root(const H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_indirect_t *root_iblock)
H5_DLL herr_t H5HF_dtable_init(H5HF_dtable_t *dtable)
H5_DLL herr_t H5HF_man_iter_next(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter, unsigned nentries)
hbool_t huge_ids_direct
Definition: H5HFpkg.h:355
Definition: H5Fpkg.h:255
H5_DLL herr_t H5HF_huge_bt2_indir_found(const void *nrecord, void *op_data)

MISR Toolkit - Copyright © 2005 - 2020 Jet Propulsion Laboratory
Generated on Fri Jun 19 2020 22:49:52