diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2006-04-30 13:32:41 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2006-04-30 13:32:41 (GMT) |
commit | 4965bf1839b4219c3063e27d37bc59a777cc1fb5 (patch) | |
tree | 925c87307aa9c13c66c301b0d3ca9283e9b20d32 /src/H5HFpkg.h | |
parent | eb96132022da938d4b54ae4dd482919a178c4ee5 (diff) | |
download | hdf5-4965bf1839b4219c3063e27d37bc59a777cc1fb5.zip hdf5-4965bf1839b4219c3063e27d37bc59a777cc1fb5.tar.gz hdf5-4965bf1839b4219c3063e27d37bc59a777cc1fb5.tar.bz2 |
[svn-r12317] Purpose:
Code checkpoint
Description:
More progress on fractal heap, can now re-open an existing heap, although
the free space algorithm still needs work.
Also, use the new "pinned entry" metadata cache code.
Platforms tested:
FreeBSD 4.11 (sleipnir)
Linux 2.4 (heping)
Solaris 9 (shanti)
Linux 2.4/64 (mir)
Diffstat (limited to 'src/H5HFpkg.h')
-rw-r--r-- | src/H5HFpkg.h | 263 |
1 files changed, 163 insertions, 100 deletions
diff --git a/src/H5HFpkg.h b/src/H5HFpkg.h index 1f1518b..af06770 100644 --- a/src/H5HFpkg.h +++ b/src/H5HFpkg.h @@ -79,6 +79,7 @@ + (h)->sizeof_size /* Total std. free entries */ \ + (h)->sizeof_size /* Total size of heap */ \ + (h)->sizeof_size /* Size of man. space in heap */ \ + + (h)->sizeof_size /* Size of alloacted man. space in heap */ \ + (h)->sizeof_size /* Size of std. space in heap */ \ + (h)->sizeof_size /* Number of objects in heap */ \ + H5HF_DTABLE_INFO_SIZE(h) /* Size of managed obj. doubling-table info */ \ @@ -99,9 +100,6 @@ \ /* Fractal heap managed, absolutely mapped direct block specific fields */ \ + (h)->sizeof_addr /* File address of heap owning the block */ \ - + (h)->sizeof_addr /* File address of parent block */ \ - + 2 /* Entry within parent block */ \ - + 2 /* # of rows for parent block */ \ + (h)->heap_off_size /* Offset of the block in the heap */ \ + H5HF_SIZEOF_OFFSET_LEN(s) /* Offset of first descriptor in free list */ \ ) @@ -111,9 +109,6 @@ \ /* Fractal heap managed, absolutely mapped direct block specific fields */ \ + (h)->sizeof_addr /* File address of heap owning the block */ \ - + (h)->sizeof_addr /* File address of parent block */ \ - + 2 /* Entry within parent block */ \ - + 2 /* # of rows for parent block */ \ + (h)->heap_off_size /* Offset of the block in the heap */ \ + (d)->blk_off_size /* Offset of first descriptor in free list */ \ ) @@ -125,11 +120,7 @@ \ /* Fractal heap managed, absolutely mapped indirect block specific fields */ \ + (h)->sizeof_addr /* File address of heap owning the block */ \ - + (h)->sizeof_addr /* File address of parent block */ \ - + 2 /* Entry within parent block */ \ - + 2 /* # of rows for parent block */ \ + (h)->heap_off_size /* Offset of the block in the heap */ \ - + 4 /* Next block entry to allocate from */ \ + (MIN((i)->nrows, (h)->man_dtable.max_direct_rows) * (h)->man_dtable.cparam.width * ((h)->sizeof_addr + (h)->man_dtable.max_dir_blk_off_size)) /* Size of entries for direct blocks */ \ + ((((i)->nrows > (h)->man_dtable.max_direct_rows) ? ((i)->nrows - (h)->man_dtable.max_direct_rows) : 0) * (h)->man_dtable.cparam.width * ((h)->sizeof_addr + (h)->heap_off_size)) /* Size of entries for indirect blocks */ \ ) @@ -148,7 +139,7 @@ typedef struct H5HF_dtable_t { /* Immutable, pre-set information for table */ H5HF_dtable_cparam_t cparam; /* Creation parameters for table */ - /* Derived information (stored, vary during lifetime of table) */ + /* Derived information (stored, varies during lifetime of table) */ haddr_t table_addr; /* Address of first block for table */ /* Undefined if no space allocated for table */ unsigned curr_root_rows; /* Current number of rows in the root indirect block */ @@ -175,46 +166,34 @@ typedef struct H5HF_dtable_t { /* Fractal heap free list info (forward decl - defined in H5HFflist.c) */ typedef struct H5HF_freelist_t H5HF_freelist_t; -/* Fractal heap free list section info */ -typedef struct H5HF_free_section_t { - haddr_t sect_addr; /* Address of free list section in the file */ - /* (Not actually used as address, used as unique ID for free list node) */ - size_t sect_size; /* Size of free space section */ - /* (section size is "object size", without the metadata overhead, since metadata overhead varies from block to block) */ - /* (for range sections, this is the largest single section within the range) */ - enum {H5HF_SECT_SINGLE, H5HF_SECT_RANGE, H5HF_SECT_INDIRECT} type; /* Type of free space section */ - union { - struct { - haddr_t dblock_addr; /* Address of direct block for free section */ - size_t dblock_size; /* Size of direct block */ - /* (Needed to retrieve direct block) */ - } single; - struct { - haddr_t iblock_addr; /* Address of indirect block for free section */ - unsigned iblock_nrows; /* Number of rows in indirect block */ - /* (Needed to retrieve indirect block) */ - unsigned row; /* Row for range of blocks */ - unsigned col; /* Column for range of blocks */ - unsigned num_entries; /* Number of entries covered */ - } range; - struct { - haddr_t iblock_addr; /* Address of indirect block for free section */ - unsigned iblock_nrows; /* Number of rows in indirect block */ - /* (Needed to retrieve indirect block) */ - unsigned row; /* Row for range of blocks */ - unsigned col; /* Column for range of blocks */ - unsigned num_entries; /* Number of entries covered */ - unsigned indir_row; /* Row for indirect range of blocks */ - unsigned indir_nrows; /* Number of rows in indirect blocks */ - } indirect; - } u; -} H5HF_free_section_t; +/* Forward decl indirect block info */ +typedef struct H5HF_indirect_t H5HF_indirect_t; + +/* Fractal heap block location */ +typedef struct H5HF_block_loc_t { + /* Necessary table fields */ + unsigned row; /* Row of block in doubling table */ + unsigned col; /* Column of block in doubling table */ + + /* Derived/computed/cached table fields */ + unsigned entry; /* Entry of block in doubling table */ + + /* Infrastructure */ + H5HF_indirect_t *context; /* Pointer to the indirect block containing the block */ + struct H5HF_block_loc_t *up; /* Pointer to next level up in the stack of levels */ +} H5HF_block_loc_t; + +/* Fractal heap block iterator info */ +typedef struct H5HF_block_iter_t { + hbool_t ready; /* Set if iterator is finished initializing */ + H5HF_block_loc_t *curr; /* Pointer to the current level information for iterator */ +} H5HF_block_iter_t; /* The fractal heap header information */ /* (Each fractal heap header has certain information that is shared across all * the instances of blocks in that fractal heap) */ -typedef struct H5HF_t { +typedef struct H5HF_hdr_t { /* Information for H5AC cache functions, _must_ be first field in structure */ H5AC_info_t cache_info; @@ -225,20 +204,28 @@ typedef struct H5HF_t { /* Statistics for heap */ hsize_t total_size; /* Total amount of space used by heap (managed & standalone) */ hsize_t man_size; /* Total amount of managed space in heap */ + hsize_t man_alloc_size; /* Total amount of allocated managed space in heap */ hsize_t std_size; /* Total amount of standalone space in heap */ hsize_t nobjs; /* Number of objects in heap */ /* Cached/computed values (not stored in header) */ size_t rc; /* Reference count of child blocks */ hbool_t dirty; /* Shared info is modified */ - hbool_t evicted; /* Shared info is evicted from cache */ haddr_t heap_addr; /* Address of heap header in the file */ H5AC_protect_t mode; /* Access mode for heap */ H5F_t *f; /* Pointer to file for heap */ size_t sizeof_size; /* Size of file sizes */ size_t sizeof_addr; /* Size of file addresses */ - H5HF_freelist_t *flist; /* Free list for objects in heap */ size_t id_len; /* Size of heap IDs */ + H5HF_freelist_t *flist; /* Free list for objects in heap */ + unsigned fl_gen; /* Free list "generation" */ + H5HF_block_iter_t next_block; /* Block iterator for searching for next block with space */ + hbool_t freelist_sync; /* If the heap's free list in memory is in sync with the free list on disk */ + /* (ie. all existing blocks have been scanned + * for free space (or heap is new and there are + * no blocks with unknown free space) and new + * free space is added by adding new blocks) + */ /* Doubling table information */ /* (Partially set by user, partially derived/updated internally) */ @@ -254,7 +241,7 @@ typedef struct H5HF_t { hbool_t debug_objs; /* Is the heap storing objects in 'debug' format */ hbool_t have_io_filter; /* Does the heap have I/O filters for the direct blocks? */ hbool_t write_once; /* Is heap being written in "write once" mode? */ -} H5HF_t; +} H5HF_hdr_t; /* Indirect block entry */ typedef struct H5HF_indirect_ent_t { @@ -264,33 +251,27 @@ typedef struct H5HF_indirect_ent_t { } H5HF_indirect_ent_t; /* Fractal heap indirect block */ -typedef struct H5HF_indirect_t { +struct H5HF_indirect_t { /* Information for H5AC cache functions, _must_ be first field in structure */ H5AC_info_t cache_info; - /* Internal heap information */ + /* Internal heap information (not stored) */ size_t rc; /* Reference count of child blocks */ hbool_t dirty; /* Info is modified */ - hbool_t evicted; /* Info is evicted from cache */ - H5HF_t *shared; /* Shared heap header info */ + H5HF_hdr_t *hdr; /* Shared heap header info */ + unsigned fl_gen; /* Free list "generation" */ struct H5HF_indirect_t *parent; /* Shared parent indirect block info */ + unsigned par_entry; /* Entry in parent's table */ hsize_t child_free_space; /* Total amount of free space in children */ haddr_t addr; /* Address of this indirect block on disk */ unsigned nrows; /* Total # of rows in indirect block */ unsigned max_rows; /* Max. # of rows in indirect block */ size_t size; /* Size of indirect block on disk */ - unsigned next_col; /* "Column" of next managed block (in doubling table) */ - unsigned next_row; /* "Row" of next managed block (in doubling table) */ - hsize_t next_size; /* Size of next managed block */ - H5HF_indirect_ent_t *ents; /* Pointer to block entry table */ /* Stored values */ - haddr_t par_addr; /* Address of parent block on disk */ - unsigned par_entry; /* Entry in parent's table */ - unsigned par_nrows; /* Total # of rows in parent indirect block */ hsize_t block_off; /* Offset of the block within the heap's address space */ - size_t next_entry; /* Entry of next managed block */ -} H5HF_indirect_t; + H5HF_indirect_ent_t *ents; /* Pointer to block entry table */ +}; /* Direct block free list node */ typedef struct H5HF_direct_free_node_t { @@ -314,8 +295,10 @@ typedef struct H5HF_direct_t { H5AC_info_t cache_info; /* Internal heap information */ - H5HF_t *shared; /* Shared heap header info */ + H5HF_hdr_t *hdr; /* Shared heap header info */ + unsigned fl_gen; /* Free list "generation" */ H5HF_indirect_t *parent; /* Shared parent indirect block info */ + unsigned par_entry; /* Entry in parent's table */ size_t size; /* Size of direct block */ unsigned blk_off_size; /* Size of offsets in the block */ size_t blk_free_space; /* Total amount of free space in block */ @@ -323,13 +306,16 @@ typedef struct H5HF_direct_t { uint8_t *blk; /* Pointer to buffer containing block data */ /* Stored values */ - haddr_t par_addr; /* Address of parent block on disk */ - unsigned par_entry; /* Entry in parent's table */ - unsigned par_nrows; /* Total # of rows in parent indirect block */ hsize_t block_off; /* Offset of the block within the heap's address space */ size_t free_list_head; /* Offset of head of free list in block */ } H5HF_direct_t; +/* Fractal heap */ +struct H5HF_t { + H5HF_hdr_t *hdr; /* Pointer to internal fractal heap header info */ + unsigned fo_count; /* Open object count for file */ +}; + /* Fractal heap metadata statistics info */ typedef struct H5HF_stat_t { hsize_t total_size; /* Total size of heap allocated (man & std) */ @@ -339,6 +325,56 @@ typedef struct H5HF_stat_t { hsize_t nobjs; /* Number of objects in heap */ } H5HF_stat_t; +/* Fractal heap free list section info */ +typedef struct H5HF_free_section_t { + haddr_t sect_addr; /* Address of free list section in the file */ + /* (Not actually used as address, used as unique ID for free list node) */ + size_t sect_size; /* Size of free space section */ + /* (section size is "object size", without the metadata overhead, since metadata overhead varies from block to block) */ + /* (for range sections, this is the largest single section within the range) */ + enum { + H5HF_SECT_SINGLE, /* Section is actual bytes in a direct block */ + H5HF_SECT_OPAQUE, /* Section is an opaque # of bytes in child of an indirect block */ + H5HF_SECT_RANGE, /* Section is a range of direct blocks in an indirect block row */ + H5HF_SECT_INDIRECT} /* Section is a range of _indirect_ blocks in an indirect block row */ + type; /* Type of free space section */ + union { + struct { + H5HF_indirect_t *parent; /* Indirect block parent for free section's direct block */ + unsigned par_entry; /* Entry of free section's direct block in parent indirect block */ + /* (Needed to retrieve direct block) */ + + haddr_t dblock_addr; /* Address of direct block for free section */ + size_t dblock_size; /* Size of direct block */ + /* (Needed to retrieve direct block) */ + } single; + struct { + H5HF_indirect_t *iblock; /* Indirect block parent for free section's child block */ + unsigned entry; /* Entry of free section's child block in parent indirect block */ + } opaque; + struct { + H5HF_indirect_t *iblock; /* Indirect block for free section */ + unsigned row; /* Row for range of blocks */ + unsigned col; /* Column for range of blocks */ + unsigned num_entries; /* Number of entries covered */ + } range; + struct { + H5HF_indirect_t *iblock; /* Indirect block for free section */ + unsigned row; /* Row for range of blocks */ + unsigned col; /* Column for range of blocks */ + unsigned num_entries; /* Number of entries covered */ + unsigned indir_row; /* Row for indirect range of blocks */ + unsigned indir_nrows; /* Number of rows in indirect blocks */ + } indirect; + } u; +} H5HF_free_section_t; + +/* Fractal heap "parent info" (for loading a block) */ +typedef struct H5HF_parent_t { + H5HF_hdr_t *hdr; /* Pointer to heap header info */ + H5HF_indirect_t *iblock; /* Pointer to parent indirect block */ + unsigned entry; /* Location of block in parent's entry table */ +} H5HF_parent_t; /*****************************/ /* Package Private Variables */ @@ -353,8 +389,8 @@ H5_DLLVAR const H5AC_class_t H5AC_FHEAP_DBLOCK[1]; /* H5HF indirect block inherits cache-like properties from H5AC */ H5_DLLVAR const H5AC_class_t H5AC_FHEAP_IBLOCK[1]; -/* Declare a free list to manage the H5HF_t struct */ -H5FL_EXTERN(H5HF_t); +/* Declare a free list to manage the H5HF_hdr_t struct */ +H5FL_EXTERN(H5HF_hdr_t); /* Declare a free list to manage the H5HF_direct_t struct */ H5FL_EXTERN(H5HF_direct_t); @@ -383,57 +419,68 @@ H5FL_EXTERN(H5HF_free_section_t); /******************************/ /* Routines for managing shared fractal heap header */ -H5_DLL H5HF_t * H5HF_hdr_alloc(H5F_t *f); -H5_DLL herr_t H5HF_hdr_init(H5HF_t *hdr, haddr_t heap_addr, H5HF_create_t *cparam); -H5_DLL herr_t H5HF_hdr_finish_init(H5HF_t *hdr); +H5_DLL H5HF_hdr_t * H5HF_hdr_alloc(H5F_t *f); +H5_DLL herr_t H5HF_hdr_init(H5HF_hdr_t *hdr, haddr_t fh_addr, H5HF_create_t *cparam); +H5_DLL herr_t H5HF_hdr_finish_init(H5HF_hdr_t *hdr); /* Doubling table routines */ H5_DLL herr_t H5HF_dtable_init(H5HF_dtable_t *dtable); H5_DLL herr_t H5HF_dtable_dest(H5HF_dtable_t *dtable); H5_DLL herr_t H5HF_dtable_lookup(const H5HF_dtable_t *dtable, hsize_t off, unsigned *row, unsigned *col); +H5_DLL unsigned H5HF_dtable_size_to_row(H5HF_dtable_t *dtable, size_t block_size); /* Heap header routines */ -H5_DLL herr_t H5HF_cache_hdr_dest_real(H5HF_t *hdr); -H5_DLL herr_t H5HF_hdr_incr(H5HF_t *hdr); -H5_DLL herr_t H5HF_hdr_decr(H5HF_t *hdr); -H5_DLL herr_t H5HF_hdr_dirty(hid_t dxpl_id, H5HF_t *hdr); -H5_DLL herr_t H5HF_hdr_extend_heap(H5HF_t *hdr, hsize_t new_size, hsize_t extra_free); +H5_DLL herr_t H5HF_hdr_incr(H5HF_hdr_t *hdr); +H5_DLL herr_t H5HF_hdr_decr(H5HF_hdr_t *hdr); +H5_DLL herr_t H5HF_hdr_dirty(H5HF_hdr_t *hdr); +H5_DLL herr_t H5HF_hdr_extend_heap(H5HF_hdr_t *hdr, hsize_t new_size, hsize_t extra_free); +H5_DLL herr_t H5HF_hdr_inc_alloc(H5HF_hdr_t *hdr, hsize_t new_alloc_size, + unsigned nentries); /* Indirect block routines */ -H5_DLL herr_t H5HF_cache_iblock_dest_real(H5HF_indirect_t *iblock); H5_DLL herr_t H5HF_iblock_incr(H5HF_indirect_t *iblock); H5_DLL herr_t H5HF_iblock_decr(H5HF_indirect_t *iblock); -H5_DLL herr_t H5HF_iblock_dirty(hid_t dxpl_id, H5HF_indirect_t *iblock); -H5_DLL H5HF_indirect_t * H5HF_man_iblock_place_dblock(H5HF_t *fh, hid_t dxpl_id, - size_t min_dblock_size, haddr_t *addr_p, size_t *entry_p, - size_t *dblock_size); -H5_DLL herr_t H5HF_man_iblock_alloc_range(H5HF_t *hdr, hid_t dxpl_id, - H5HF_free_section_t **sec_node, size_t obj_size); -H5_DLL herr_t H5HF_man_iblock_alloc_indirect(H5HF_t *hdr, hid_t dxpl_id, - H5HF_free_section_t **sec_node, size_t obj_size); +H5_DLL herr_t H5HF_iblock_dirty(H5HF_indirect_t *iblock); +H5_DLL H5HF_indirect_t * H5HF_man_iblock_place_dblock(H5HF_hdr_t *fh, hid_t dxpl_id, + size_t min_dblock_size, size_t *entry_p, size_t *dblock_size); +H5_DLL herr_t H5HF_man_iblock_alloc_range(H5HF_hdr_t *hdr, hid_t dxpl_id, + H5HF_free_section_t **sec_node); +H5_DLL herr_t H5HF_man_iblock_alloc_indirect(H5HF_hdr_t *hdr, hid_t dxpl_id, + H5HF_free_section_t **sec_node); +H5_DLL herr_t H5HF_man_iblock_alloc_opaque(H5HF_hdr_t *hdr, hid_t dxpl_id, + H5HF_free_section_t **sec_node); +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, + H5AC_protect_t rw); /* Direct block routines */ -H5_DLL herr_t H5HF_man_dblock_new(H5HF_t *fh, hid_t dxpl_id, size_t request); -H5_DLL herr_t H5HF_man_dblock_create(hid_t dxpl_id, H5HF_t *hdr, +H5_DLL herr_t H5HF_man_dblock_new(H5HF_hdr_t *fh, hid_t dxpl_id, size_t request); +H5_DLL herr_t H5HF_man_dblock_build_freelist(H5HF_direct_t *dblock, haddr_t dblock_addr); +H5_DLL herr_t H5HF_man_dblock_destroy_freelist(H5HF_direct_t *dblock); +H5_DLL herr_t H5HF_man_dblock_adj_free(H5HF_direct_t *dblock, ssize_t amt); +H5_DLL herr_t H5HF_man_dblock_create(hid_t dxpl_id, H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblock, unsigned par_entry, size_t block_size, hsize_t block_off, haddr_t *addr_p, H5HF_free_section_t **ret_sec_node); -H5_DLL herr_t H5HF_man_dblock_adj_free(hid_t dxpl_id, H5HF_direct_t *dblock, ssize_t amt); -H5_DLL herr_t H5HF_man_dblock_build_freelist(H5HF_direct_t *dblock, haddr_t dblock_addr); +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); /* Routines for internal operations */ H5_DLL herr_t H5HF_free_section_free_cb(void *item, void UNUSED *key, void UNUSED *op_data); -H5_DLL herr_t H5HF_man_find(H5HF_t *fh, hid_t dxpl_id, size_t request, +H5_DLL herr_t H5HF_man_find(H5HF_hdr_t *fh, hid_t dxpl_id, size_t request, H5HF_free_section_t **sec_node/*out*/); -H5_DLL herr_t H5HF_man_insert(H5HF_t *fh, hid_t dxpl_id, +H5_DLL herr_t H5HF_man_insert(H5HF_hdr_t *fh, hid_t dxpl_id, H5HF_free_section_t *sec_node, size_t obj_size, const void *obj, void *id); -H5_DLL herr_t H5HF_man_read(H5HF_t *fh, hid_t dxpl_id, hsize_t obj_off, +H5_DLL herr_t H5HF_man_read(H5HF_hdr_t *fh, hid_t dxpl_id, hsize_t obj_off, size_t obj_len, void *obj); /* Metadata cache callbacks */ -H5_DLL herr_t H5HF_cache_hdr_dest(H5F_t *f, H5HF_t *fh); +H5_DLL herr_t H5HF_cache_hdr_dest(H5F_t *f, H5HF_hdr_t *fh); H5_DLL herr_t H5HF_cache_dblock_dest(H5F_t *f, H5HF_direct_t *dblock); H5_DLL herr_t H5HF_cache_iblock_dest(H5F_t *f, H5HF_indirect_t *iblock); @@ -446,24 +493,40 @@ 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); /* Statistics routines */ -H5_DLL herr_t H5HF_stat_info(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, - H5HF_stat_t *stats); +H5_DLL herr_t H5HF_stat_info(H5HF_t *fh, H5HF_stat_t *stats); /* Free list routines */ -H5_DLL H5HF_freelist_t * H5HF_flist_create(size_t max_block_size, +H5_DLL H5HF_freelist_t * H5HF_flist_create(unsigned max_index_bits, H5SL_operator_t node_free_op); H5_DLL herr_t H5HF_flist_add(H5HF_freelist_t *flist, void *node, size_t *size_key, haddr_t *addr_key); H5_DLL htri_t H5HF_flist_find(H5HF_freelist_t *flist, size_t request, void **node); +H5_DLL herr_t H5HF_flist_reset(H5HF_freelist_t *flist); H5_DLL herr_t H5HF_flist_free(H5HF_freelist_t *flist); +/* Block iteration routines */ +H5_DLL herr_t H5HF_man_iter_init(H5HF_block_iter_t *biter); +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); +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); +H5_DLL herr_t H5HF_man_iter_next(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter, + unsigned nentries); +H5_DLL herr_t H5HF_man_iter_up(H5HF_block_iter_t *biter); +H5_DLL herr_t H5HF_man_iter_down(H5HF_block_iter_t *biter, H5HF_indirect_t *iblock); +H5_DLL herr_t H5HF_man_iter_reset(H5HF_block_iter_t *biter); +H5_DLL herr_t H5HF_man_iter_update_iblock(H5HF_block_iter_t *biter, H5HF_indirect_t *iblock); +H5_DLL herr_t H5HF_man_iter_curr(H5HF_block_iter_t *biter, unsigned *row, unsigned *col, + unsigned *entry, H5HF_indirect_t **block); +H5_DLL herr_t H5HF_man_iter_offset(H5HF_hdr_t *hdr, H5HF_block_iter_t *biter, + hsize_t *offset); +H5_DLL hbool_t H5HF_man_iter_ready(H5HF_block_iter_t *biter); + /* Testing routines */ #ifdef H5HF_TESTING -H5_DLL herr_t H5HF_get_cparam_test(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, - H5HF_create_t *cparam); -H5_DLL hsize_t H5HF_get_dblock_free_test(H5F_t *f, hid_t dxpl_id, - haddr_t fh_addr, unsigned row); +H5_DLL herr_t H5HF_get_cparam_test(H5HF_t *fh, H5HF_create_t *cparam); +H5_DLL hsize_t H5HF_get_dblock_free_test(H5HF_t *fh, unsigned row); #endif /* H5HF_TESTING */ #endif /* _H5HFpkg_H */ |