diff options
author | Vailin Choi <vchoi@hdfgroup.org> | 2010-08-20 19:25:49 (GMT) |
---|---|---|
committer | Vailin Choi <vchoi@hdfgroup.org> | 2010-08-20 19:25:49 (GMT) |
commit | 8b07a4a214c0fc8c5d6e3a859f32ee5127cdf473 (patch) | |
tree | 633586c55f1316ce7545f9d5f98844d678f1adcb /src | |
parent | 9c218ea879de3f13464aed3c96d5298d1c934774 (diff) | |
download | hdf5-8b07a4a214c0fc8c5d6e3a859f32ee5127cdf473.zip hdf5-8b07a4a214c0fc8c5d6e3a859f32ee5127cdf473.tar.gz hdf5-8b07a4a214c0fc8c5d6e3a859f32ee5127cdf473.tar.bz2 |
[svn-r19267] Modifications to use Fixed Array Indexing for extendible chunked dataset
(fixed max. dim. setting but exclude H5S_UNLIMITED)
Diffstat (limited to 'src')
-rw-r--r-- | src/H5Dchunk.c | 35 | ||||
-rw-r--r-- | src/H5Dfarray.c | 43 | ||||
-rw-r--r-- | src/H5Dlayout.c | 70 | ||||
-rw-r--r-- | src/H5Oprivate.h | 7 | ||||
-rw-r--r-- | src/H5Pdcpl.c | 2 |
5 files changed, 100 insertions, 57 deletions
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c index 98dfff9..fa4b62c 100644 --- a/src/H5Dchunk.c +++ b/src/H5Dchunk.c @@ -190,7 +190,7 @@ H5D_nonexistent_readvv(const H5D_io_info_t *io_info, /* Helper routines */ static herr_t H5D_chunk_set_info_real(H5O_layout_chunk_t *layout, unsigned ndims, - const hsize_t *curr_dims); + const hsize_t *curr_dims, const hsize_t *max_dims); static void *H5D_chunk_alloc(size_t size, const H5O_pline_t *pline); static void *H5D_chunk_xfree(void *chk, const H5O_pline_t *pline); static void *H5D_chunk_realloc(void *chk, size_t size, @@ -283,10 +283,15 @@ H5FL_BLK_DEFINE_STATIC(chunk); * Programmer: Quincey Koziol * Tuesday, June 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset for Fixed Array Indexing. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ static herr_t -H5D_chunk_set_info_real(H5O_layout_chunk_t *layout, unsigned ndims, const hsize_t *curr_dims) +H5D_chunk_set_info_real(H5O_layout_chunk_t *layout, unsigned ndims, const hsize_t *curr_dims, const hsize_t *max_dims) { unsigned u; /* Local index variable */ herr_t ret_value = SUCCEED; /* Return value */ @@ -299,17 +304,21 @@ H5D_chunk_set_info_real(H5O_layout_chunk_t *layout, unsigned ndims, const hsize_ HDassert(curr_dims); /* Compute the # of chunks in dataset dimensions */ - for(u = 0, layout->nchunks = 1; u < ndims; u++) { + for(u = 0, layout->nchunks = 1, layout->max_nchunks = 1; u < ndims; u++) { /* Round up to the next integer # of chunks, to accomodate partial chunks */ layout->chunks[u] = ((curr_dims[u] + layout->dim[u]) - 1) / layout->dim[u]; + layout->max_chunks[u] = ((max_dims[u] + layout->dim[u]) - 1) / layout->dim[u]; /* Accumulate the # of chunks */ layout->nchunks *= layout->chunks[u]; + layout->max_nchunks *= layout->max_chunks[u]; } /* end for */ /* Get the "down" sizes for each dimension */ if(H5V_array_down(ndims, layout->chunks, layout->down_chunks) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't compute 'down' chunk size value") + if(H5V_array_down(ndims, layout->max_chunks, layout->max_down_chunks) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't compute 'down' chunk size value") done: FUNC_LEAVE_NOAPI(ret_value) @@ -326,12 +335,18 @@ done: * Programmer: Quincey Koziol * Tuesday, June 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset for Fixed Array Indexing. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ herr_t H5D_chunk_set_info(const H5D_t *dset) { hsize_t curr_dims[H5O_LAYOUT_NDIMS]; /* Curr. size of dataset dimensions */ + hsize_t max_dims[H5O_LAYOUT_NDIMS]; /* Max. size of dataset dimensions */ int sndims; /* Rank of dataspace */ unsigned ndims; /* Rank of dataspace */ herr_t ret_value = SUCCEED; /* Return value */ @@ -342,12 +357,12 @@ H5D_chunk_set_info(const H5D_t *dset) HDassert(dset); /* Get the dim info for dataset */ - if((sndims = H5S_get_simple_extent_dims(dset->shared->space, curr_dims, NULL)) < 0) + if((sndims = H5S_get_simple_extent_dims(dset->shared->space, curr_dims, max_dims)) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataspace dimensions") H5_ASSIGN_OVERFLOW(ndims, sndims, int, unsigned); /* Set the base layout information */ - if(H5D_chunk_set_info_real(&dset->shared->layout.u.chunk, ndims, curr_dims) < 0) + if(H5D_chunk_set_info_real(&dset->shared->layout.u.chunk, ndims, curr_dims, max_dims) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set layout's chunk info") /* Call the index's "resize" callback */ @@ -5062,6 +5077,11 @@ done: * Programmer: Peter Cao * August 20, 2005 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset for Fixed Array Indexing. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ herr_t @@ -5075,6 +5095,7 @@ H5D_chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src, H5D_chk_idx_info_t idx_info_src; /* Source chunked index info */ int sndims; /* Rank of dataspace */ hsize_t curr_dims[H5O_LAYOUT_NDIMS]; /* Curr. size of dataset dimensions */ + hsize_t max_dims[H5O_LAYOUT_NDIMS]; /* Curr. size of dataset dimensions */ H5O_pline_t _pline; /* Temporary pipeline info */ const H5O_pline_t *pline; /* Pointer to pipeline info to use */ H5T_path_t *tpath_src_mem = NULL, *tpath_mem_dst = NULL; /* Datatype conversion paths */ @@ -5133,12 +5154,12 @@ H5D_chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src, unsigned ndims; /* Rank of dataspace */ /* Get the dim info for dataset */ - if((sndims = H5S_extent_get_dims(ds_extent_src, curr_dims, NULL)) < 0) + if((sndims = H5S_extent_get_dims(ds_extent_src, curr_dims, max_dims)) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataspace dimensions") H5_ASSIGN_OVERFLOW(ndims, sndims, int, unsigned); /* Set the source layout chunk information */ - if(H5D_chunk_set_info_real(layout_src, ndims, curr_dims) < 0) + if(H5D_chunk_set_info_real(layout_src, ndims, curr_dims, max_dims) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "can't set layout's chunk info") } /* end block */ diff --git a/src/H5Dfarray.c b/src/H5Dfarray.c index 1c910d5..f260bcc 100644 --- a/src/H5Dfarray.c +++ b/src/H5Dfarray.c @@ -78,7 +78,7 @@ typedef struct H5D_farray_del_ud_t { typedef struct H5D_farray_it_ud_t { H5D_chunk_common_ud_t common; /* Common info for Fixed Array user data (must be first) */ H5D_chunk_rec_t chunk_rec; /* Generic chunk record for callback */ - hsize_t chunk_offset[H5O_LAYOUT_NDIMS]; /* Chunk offset */ + hsize_t chunk_offset[H5O_LAYOUT_NDIMS]; /* Chunk offset for max dim */ hbool_t filtered; /* Whether the chunks are filtered */ H5D_chunk_cb_func_t cb; /* Chunk callback routine */ void *udata; /* User data for chunk callback routine */ @@ -776,6 +776,11 @@ done: * Programmer: Vailin Choi * Thursday, April 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ static herr_t @@ -817,7 +822,7 @@ H5D_farray_idx_create(const H5D_chk_idx_info_t *idx_info) } /* end else */ cparam.max_dblk_page_nelmts_bits = idx_info->layout->u.farray.cparam.max_dblk_page_nelmts_bits; HDassert(cparam.max_dblk_page_nelmts_bits > 0); - cparam.nelmts = idx_info->layout->nchunks; + cparam.nelmts = idx_info->layout->max_nchunks; /* Set up the user data */ udata.f = idx_info->f; @@ -876,6 +881,11 @@ H5D_farray_idx_is_space_alloc(const H5O_storage_chunk_t *storage) * Programmer: Vailin Choi * Thursday, April 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ static herr_t @@ -906,7 +916,7 @@ H5D_farray_idx_insert(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata) fa = idx_info->storage->u.farray.fa; /* Calculate the index of this chunk */ - if(H5V_chunk_index((idx_info->layout->ndims - 1), udata->common.offset, idx_info->layout->dim, idx_info->layout->down_chunks, &idx) < 0) + if(H5V_chunk_index((idx_info->layout->ndims - 1), udata->common.offset, idx_info->layout->dim, idx_info->layout->max_down_chunks, &idx) < 0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index") /* Check for filters on chunks */ @@ -1022,6 +1032,11 @@ done: * Programmer: Vailin Choi * Thursday, April 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ static herr_t @@ -1052,7 +1067,7 @@ H5D_farray_idx_get_addr(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udat fa = idx_info->storage->u.farray.fa; /* Calculate the index of this chunk */ - if(H5V_chunk_index((idx_info->layout->ndims - 1), udata->common.offset, idx_info->layout->dim, idx_info->layout->down_chunks, &idx) < 0) + if(H5V_chunk_index((idx_info->layout->ndims - 1), udata->common.offset, idx_info->layout->dim, idx_info->layout->max_down_chunks, &idx) < 0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index") /* Check for filters on chunks */ @@ -1093,6 +1108,11 @@ done: * Programmer: Vailin Choi * Thursday, April 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ static int @@ -1117,8 +1137,10 @@ H5D_farray_idx_iterate_cb(hsize_t UNUSED idx, const void *_elmt, void *_udata) udata->chunk_rec.chunk_addr = *(const haddr_t *)_elmt; /* Make "generic chunk" callback */ - if((ret_value = (udata->cb)(&udata->chunk_rec, udata->udata)) < 0) - HERROR(H5E_DATASET, H5E_CALLBACK, "failure in generic chunk iterator callback"); + if(H5F_addr_defined(udata->chunk_rec.chunk_addr)) { + if((ret_value = (udata->cb)(&udata->chunk_rec, udata->udata)) < 0) + HERROR(H5E_DATASET, H5E_CALLBACK, "failure in generic chunk iterator callback"); + } /* Update coordinates of chunk in dataset */ ndims = udata->common.layout->ndims - 1; @@ -1130,7 +1152,7 @@ H5D_farray_idx_iterate_cb(hsize_t UNUSED idx, const void *_elmt, void *_udata) udata->chunk_rec.offset[curr_dim] += udata->common.layout->dim[curr_dim]; /* Check if we went off the end of the current dimension */ - if(udata->chunk_offset[curr_dim] >= udata->common.layout->chunks[curr_dim]) { + if(udata->chunk_offset[curr_dim] >= udata->common.layout->max_chunks[curr_dim]) { /* Reset coordinate & move to next faster dimension */ udata->chunk_offset[curr_dim] = 0; udata->chunk_rec.offset[curr_dim] = 0; @@ -1228,6 +1250,11 @@ done: * Programmer: Vailin Choi * Thursday, April 30, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to handle extendible datdaset. + * (fixed max. dim. setting but not H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ static herr_t @@ -1258,7 +1285,7 @@ H5D_farray_idx_remove(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t fa = idx_info->storage->u.farray.fa; /* Calculate the index of this chunk */ - if(H5V_chunk_index((idx_info->layout->ndims - 1), udata->offset, idx_info->layout->dim, idx_info->layout->down_chunks, &idx) < 0) + if(H5V_chunk_index((idx_info->layout->ndims - 1), udata->offset, idx_info->layout->dim, idx_info->layout->max_down_chunks, &idx) < 0) HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index") /* Check for filters on chunks */ diff --git a/src/H5Dlayout.c b/src/H5Dlayout.c index fe3437b..bbcdcdd 100644 --- a/src/H5Dlayout.c +++ b/src/H5Dlayout.c @@ -250,6 +250,11 @@ done: * Programmer: Quincey Koziol * Thursday, January 15, 2009 * + * Modifications: + * Vailin Choi; June 2010 + * Modified to use Fixed Array indexing for extendible chunked dataset. + * (fixed max. dim. setting but exclude H5S_UNLIMITED) + * *------------------------------------------------------------------------- */ herr_t @@ -275,52 +280,42 @@ H5D_layout_set_latest_version(H5O_layout_t *layout, const H5S_t *space) /* Avoid scalar/null dataspace */ if(ndims > 0) { hsize_t max_dims[H5O_LAYOUT_NDIMS]; /* Maximum dimension sizes */ - hsize_t curr_dims[H5O_LAYOUT_NDIMS]; /* Current dimension sizes */ - unsigned unlim_count; /* Count of unlimited max. dimensions */ - hbool_t fixed = FALSE; /* Fixed dimension or not */ + unsigned unlim_count = 0; /* Count of unlimited max. dimensions */ unsigned u; /* Local index variable */ /* Query the dataspace's dimensions */ - if(H5S_get_simple_extent_dims(space, curr_dims, max_dims) < 0) + if(H5S_get_simple_extent_dims(space, NULL, max_dims) < 0) HGOTO_ERROR(H5E_OHDR, H5E_CANTGET, FAIL, "can't get dataspace max. dimensions") /* Spin through the max. dimensions, looking for unlimited dimensions */ - unlim_count = 0; for(u = 0; u < ndims; u++) if(max_dims[u] == H5S_UNLIMITED) unlim_count++; - /* Check if it is fixed dimension */ - if(0 == unlim_count) { - fixed = TRUE; - for(u = 0; u < ndims; u++) - if(curr_dims[u] != max_dims[u]) { - fixed = FALSE; - break; - } /* end if */ - } /* end if */ - - /* If we have only 1 unlimited dimension, we can use extensible array index */ - if(1 == unlim_count) { - /* Set the chunk index type to an extensible array */ - layout->u.chunk.idx_type = H5D_CHUNK_IDX_EARRAY; - layout->storage.u.chunk.idx_type = H5D_CHUNK_IDX_EARRAY; - layout->storage.u.chunk.ops = H5D_COPS_EARRAY; - - /* Set the extensible array creation parameters */ - /* (use hard-coded defaults for now, until we give applications - * control over this with a property list - QAK) - */ - layout->u.chunk.u.earray.cparam.max_nelmts_bits = H5D_EARRAY_MAX_NELMTS_BITS; - layout->u.chunk.u.earray.cparam.idx_blk_elmts = H5D_EARRAY_IDX_BLK_ELMTS; - layout->u.chunk.u.earray.cparam.sup_blk_min_data_ptrs = H5D_EARRAY_SUP_BLK_MIN_DATA_PTRS; - layout->u.chunk.u.earray.cparam.data_blk_min_elmts = H5D_EARRAY_DATA_BLK_MIN_ELMTS; - layout->u.chunk.u.earray.cparam.max_dblk_page_nelmts_bits = H5D_EARRAY_MAX_DBLOCK_PAGE_NELMTS_BITS; - } /* end if */ - /* Chunked datasets with fixed dimensions */ - else if(layout->type == H5D_CHUNKED && fixed) { - /* Set the chunk index type to a fixed array */ - layout->u.chunk.idx_type = H5D_CHUNK_IDX_FARRAY; + /* Chunked datasets with unlimited dimension(s) */ + if(unlim_count) { /* dataset with unlimited dimension(s) must be chunked */ + HDassert(layout->type == H5D_CHUNKED); + if(1 == unlim_count) { /* Chunked dataset with only 1 unlimited dimension */ + layout->u.chunk.idx_type = H5D_CHUNK_IDX_EARRAY; + layout->storage.u.chunk.idx_type = H5D_CHUNK_IDX_EARRAY; + layout->storage.u.chunk.ops = H5D_COPS_EARRAY; + + /* Set the extensible array creation parameters */ + /* (use hard-coded defaults for now, until we give applications + * control over this with a property list - QAK) + */ + layout->u.chunk.u.earray.cparam.max_nelmts_bits = H5D_EARRAY_MAX_NELMTS_BITS; + layout->u.chunk.u.earray.cparam.idx_blk_elmts = H5D_EARRAY_IDX_BLK_ELMTS; + layout->u.chunk.u.earray.cparam.sup_blk_min_data_ptrs = H5D_EARRAY_SUP_BLK_MIN_DATA_PTRS; + layout->u.chunk.u.earray.cparam.data_blk_min_elmts = H5D_EARRAY_DATA_BLK_MIN_ELMTS; + layout->u.chunk.u.earray.cparam.max_dblk_page_nelmts_bits = H5D_EARRAY_MAX_DBLOCK_PAGE_NELMTS_BITS; + } else { /* Chunked dataset with > 1 unlimited dimensions */ + /* Add setup to use v2 B-tree chunk indices here */ + } + } else if(layout->type == H5D_CHUNKED) { + /* Chunked dataset with fixed dimensions (with or without max. dimension setting) */ + /* Set the chunk index type to Fixed Array */ + layout->u.chunk.idx_type = H5D_CHUNK_IDX_FARRAY; layout->storage.u.chunk.idx_type = H5D_CHUNK_IDX_FARRAY; layout->storage.u.chunk.ops = H5D_COPS_FARRAY; @@ -330,9 +325,6 @@ H5D_layout_set_latest_version(H5O_layout_t *layout, const H5S_t *space) */ layout->u.chunk.u.farray.cparam.max_dblk_page_nelmts_bits = H5D_FARRAY_MAX_DBLK_PAGE_NELMTS_BITS; } /* end if */ - else { - /* Add setup for v2 B-tree indices here */ - } /* end else */ } /* end if */ done: diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index 0195561..4bef827 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -467,8 +467,11 @@ typedef struct H5O_layout_chunk_t { unsigned enc_bytes_per_dim; /* Encoded # of bytes for storing each chunk dimension */ uint32_t size; /* Size of chunk in bytes */ hsize_t nchunks; /* Number of chunks in dataset */ - hsize_t chunks[H5O_LAYOUT_NDIMS]; /* # of chunks in dataset dimensions */ - hsize_t down_chunks[H5O_LAYOUT_NDIMS]; /* "down" size of number of chunks in each dimension */ + hsize_t max_nchunks; /* Max. number of chunks in dataset */ + hsize_t chunks[H5O_LAYOUT_NDIMS]; /* # of chunks in each dataset dimension */ + hsize_t max_chunks[H5O_LAYOUT_NDIMS]; /* # of chunks in each dataset's max. dimension */ + hsize_t down_chunks[H5O_LAYOUT_NDIMS]; /* "down" size of number of chunks in each dimension */ + hsize_t max_down_chunks[H5O_LAYOUT_NDIMS]; /* "down" size of number of chunks in each max dim */ union { H5O_layout_chunk_farray_t farray; /* Information for fixed array index */ H5O_layout_chunk_earray_t earray; /* Information for extensible array index */ diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c index e672ad0..5bc2783 100644 --- a/src/H5Pdcpl.c +++ b/src/H5Pdcpl.c @@ -54,7 +54,7 @@ #define H5D_DEF_STORAGE_COMPACT_INIT {(hbool_t)FALSE, (size_t)0, NULL} #define H5D_DEF_STORAGE_CONTIG_INIT {HADDR_UNDEF, (hsize_t)0} #define H5D_DEF_STORAGE_CHUNK_INIT {H5D_CHUNK_IDX_BTREE, HADDR_UNDEF, H5D_COPS_BTREE, {{NULL}}} -#define H5D_DEF_LAYOUT_CHUNK_INIT {H5D_CHUNK_IDX_BTREE, (uint8_t)0, (unsigned)1, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, (unsigned)0, (uint32_t)0, (hsize_t)0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {{{(uint8_t)0}}}} +#define H5D_DEF_LAYOUT_CHUNK_INIT {H5D_CHUNK_IDX_BTREE, (uint8_t)0, (unsigned)1, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, (unsigned)0, (uint32_t)0, (hsize_t)0, (hsize_t)0, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {{{(uint8_t)0}}}} #ifdef H5_HAVE_C99_DESIGNATED_INITIALIZER #define H5D_DEF_STORAGE_COMPACT {H5D_COMPACT, { .compact = H5D_DEF_STORAGE_COMPACT_INIT }} #define H5D_DEF_STORAGE_CONTIG {H5D_CONTIGUOUS, { .contig = H5D_DEF_STORAGE_CONTIG_INIT }} |