diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2002-04-25 17:56:56 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2002-04-25 17:56:56 (GMT) |
commit | d33f7d93a34d22b4f48e001426f78090d859a631 (patch) | |
tree | ee50ab76e9e92bb3ff64df1fa71526595e5af8a3 /src/H5Fistore.c | |
parent | 112fb8d45cd57dd54d8ede466f168941dcf3c352 (diff) | |
download | hdf5-d33f7d93a34d22b4f48e001426f78090d859a631.zip hdf5-d33f7d93a34d22b4f48e001426f78090d859a631.tar.gz hdf5-d33f7d93a34d22b4f48e001426f78090d859a631.tar.bz2 |
[svn-r5259] Purpose:
Code cleanup
Description:
Previously, the I/O pipeline (pline), external file list (efl) and fill-
value (fill) structs were passed down the raw data function call chain,
even into and/or through functions which didn't use them. Since all three
of these pieces of information are available from the dataset creation
property list, just pass the dataset creation property list down the
function call chain and query for the information needed in a particular
function.
Platforms tested:
FreeBSD 4.5 (sleipnir)
Diffstat (limited to 'src/H5Fistore.c')
-rw-r--r-- | src/H5Fistore.c | 323 |
1 files changed, 143 insertions, 180 deletions
diff --git a/src/H5Fistore.c b/src/H5Fistore.c index 54b2fd2..1c2b137 100644 --- a/src/H5Fistore.c +++ b/src/H5Fistore.c @@ -1774,7 +1774,7 @@ H5F_istore_unlock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, */ herr_t H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, - const H5O_pline_t *pline, const H5O_fill_t *fill, + H5P_genplist_t *dc_plist, const hsize_t size_m[], const hssize_t offset_m[], const hssize_t offset_f[], const hsize_t size[], void *buf) { @@ -1792,6 +1792,9 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, unsigned idx_hint=0; /*cache index hint */ hsize_t chunk_size; /* Bytes in chunk */ haddr_t chunk_addr; /* Chunk address on disk */ + H5O_pline_t pline; /* I/O pipeline information */ + H5O_fill_t fill; /* Fill value information */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER(H5F_istore_read, FAIL); @@ -1806,6 +1809,12 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, assert(size); assert(buf); + /* Get necessary properties from property list */ + if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fill value"); + if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get data pipeline"); + /* Compute chunk size */ for (u=0, chunk_size=1; u<layout->ndims; u++) chunk_size *= layout->dim[u]; @@ -1832,7 +1841,8 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, } /* Loop over all chunks */ - while (1) { + carry=0; + while (carry==0) { for (u=0, naccessed=1; u<layout->ndims; u++) { /* The location and size of the chunk being accessed */ assert(layout->dim[u] < HSSIZET_MAX); @@ -1860,7 +1870,7 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, * for the chunk has been defined, then don't load the chunk into the * cache, just read the data from it directly. */ - if ((chunk_size>f->shared->rdcc_nbytes && pline->nfilters==0 && + if ((chunk_size>f->shared->rdcc_nbytes && pline.nfilters==0 && chunk_addr!=HADDR_UNDEF) #ifdef H5_HAVE_PARALLEL @@ -1876,8 +1886,8 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, #ifdef H5_HAVE_PARALLEL /* Additional sanity checks when operating in parallel */ - if (chunk_addr==HADDR_UNDEF || pline->nfilters>0) - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to locate raw data chunk"); + if (chunk_addr==HADDR_UNDEF || pline.nfilters>0) + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to locate raw data chunk"); #endif /* H5_HAVE_PARALLEL */ /* @@ -1890,29 +1900,24 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, for (u=l.ndims; u-- > 0; /*void*/) l.dim[u] = layout->dim[u]; l.addr = chunk_addr; - if (H5F_arr_read(f, H5P_DATASET_XFER_DEFAULT, &l, pline, fill, NULL/*no efl*/, + if (H5F_arr_read(f, H5P_DATASET_XFER_DEFAULT, &l, dc_plist, sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0) - HRETURN_ERROR (H5E_IO, H5E_READERROR, FAIL, "unable to read raw data from file"); + HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "unable to read raw data from file"); } /* end if */ else { /* * Lock the chunk, transfer data to the application, then unlock * the chunk. */ - if (NULL==(chunk=H5F_istore_lock(f, dxpl_id, layout, pline, fill, - chunk_offset, FALSE, &idx_hint))) { - HRETURN_ERROR(H5E_IO, H5E_READERROR, FAIL, - "unable to read raw data chunk"); - } + if (NULL==(chunk=H5F_istore_lock(f, dxpl_id, layout, &pline, &fill, + chunk_offset, FALSE, &idx_hint))) + HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to read raw data chunk"); H5V_hyper_copy(layout->ndims, sub_size, size_m, sub_offset_m, (void*)buf, layout->dim, offset_wrt_chunk, chunk); H5_CHECK_OVERFLOW(naccessed,hsize_t,size_t); - if (H5F_istore_unlock(f, dxpl_id, layout, pline, FALSE, - chunk_offset, &idx_hint, chunk, - (size_t)naccessed)<0) { - HRETURN_ERROR(H5E_IO, H5E_READERROR, FAIL, - "unable to unlock raw data chunk"); - } + if (H5F_istore_unlock(f, dxpl_id, layout, &pline, FALSE, + chunk_offset, &idx_hint, chunk, (size_t)naccessed)<0) + HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to unlock raw data chunk"); } /* end else */ /* Increment indices */ @@ -1922,10 +1927,10 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, else carry = 0; } - if (carry) - break; } - FUNC_LEAVE(SUCCEED); + +done: + FUNC_LEAVE(ret_value); } @@ -1951,7 +1956,7 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, */ herr_t H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, - const H5O_pline_t *pline, const H5O_fill_t *fill, + H5P_genplist_t *dc_plist, const hsize_t size_m[], const hssize_t offset_m[], const hssize_t offset_f[], const hsize_t size[], const void *buf) @@ -1969,6 +1974,9 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, unsigned idx_hint=0; hsize_t chunk_size, naccessed; haddr_t chunk_addr; /* Chunk address on disk */ + H5O_pline_t pline; /* I/O pipeline information */ + H5O_fill_t fill; /* Fill value information */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER(H5F_istore_write, FAIL); @@ -1983,6 +1991,12 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, assert(size); assert(buf); + /* Get necessary properties from property list */ + if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fill value"); + if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get data pipeline"); + /* Compute chunk size */ for (u=0, chunk_size=1; u<layout->ndims; u++) chunk_size *= layout->dim[u]; @@ -2010,7 +2024,8 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, /* Loop over all chunks */ - while (1) { + carry=0; + while (carry==0) { for (u=0, naccessed=1; u<layout->ndims; u++) { /* The location and size of the chunk being accessed */ assert(layout->dim[u] < HSSIZET_MAX); @@ -2038,7 +2053,7 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, * for the chunk has been defined, then don't load the chunk into the * cache, just write the data to it directly. */ - if ((chunk_size>f->shared->rdcc_nbytes && pline->nfilters==0 && + if ((chunk_size>f->shared->rdcc_nbytes && pline.nfilters==0 && chunk_addr!=HADDR_UNDEF) #ifdef H5_HAVE_PARALLEL @@ -2054,8 +2069,8 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, #ifdef H5_HAVE_PARALLEL /* Additional sanity check when operating in parallel */ - if (chunk_addr==HADDR_UNDEF || pline->nfilters>0) - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to locate raw data chunk"); + if (chunk_addr==HADDR_UNDEF || pline.nfilters>0) + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to locate raw data chunk"); #endif /* H5_HAVE_PARALLEL */ /* @@ -2068,24 +2083,24 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, for (u=l.ndims; u-- > 0; /*void*/) l.dim[u] = layout->dim[u]; l.addr = chunk_addr; - if (H5F_arr_write(f, H5P_DATASET_XFER_DEFAULT, &l, pline, fill, NULL/*no efl*/, + if (H5F_arr_write(f, H5P_DATASET_XFER_DEFAULT, &l, dc_plist, sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0) - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file"); + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file"); } /* end if */ else { /* * Lock the chunk, copy from application to chunk, then unlock the * chunk. */ - if (NULL==(chunk=H5F_istore_lock(f, dxpl_id, layout, pline, fill, + if (NULL==(chunk=H5F_istore_lock(f, dxpl_id, layout, &pline, &fill, chunk_offset, (hbool_t)(naccessed==chunk_size), &idx_hint))) - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to read raw data chunk"); + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to read raw data chunk"); H5V_hyper_copy(layout->ndims, sub_size, layout->dim, offset_wrt_chunk, chunk, size_m, sub_offset_m, buf); H5_CHECK_OVERFLOW(naccessed,hsize_t,size_t); - if (H5F_istore_unlock(f, dxpl_id, layout, pline, TRUE, + if (H5F_istore_unlock(f, dxpl_id, layout, &pline, TRUE, chunk_offset, &idx_hint, chunk, (size_t)naccessed)<0) - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "uanble to unlock raw data chunk"); + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "uanble to unlock raw data chunk"); } /* end else */ /* Increment indices */ @@ -2095,11 +2110,10 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, else carry = 0; } - if (carry) - break; - } + } /* end while */ - FUNC_LEAVE(SUCCEED); +done: + FUNC_LEAVE(ret_value); } @@ -2403,33 +2417,34 @@ done: */ herr_t H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, - const hsize_t *space_dim, const H5O_pline_t *pline, - const H5O_fill_t *fill) + const hsize_t *space_dim, H5P_genplist_t *dc_plist) { int i, carry; - unsigned u; - hssize_t chunk_offset[H5O_LAYOUT_NDIMS]; - uint8_t *chunk=NULL; - unsigned idx_hint=0; - hsize_t chunk_size; -#ifdef AKC - H5F_istore_ud1_t udata; -#endif + unsigned u; + hssize_t chunk_offset[H5O_LAYOUT_NDIMS]; + uint8_t *chunk=NULL; + unsigned idx_hint=0; + hsize_t chunk_size; + H5O_pline_t pline; /* I/O pipeline information */ + H5O_fill_t fill; /* Fill value information */ + herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER(H5F_istore_allocate, FAIL); -#ifdef AKC - printf("Enter %s:\n", FUNC); -#endif /* Check args */ assert(f); assert(space_dim); - assert(pline); assert(layout && H5D_CHUNKED==layout->type); assert(layout->ndims>0 && layout->ndims<=H5O_LAYOUT_NDIMS); assert(H5F_addr_defined(layout->addr)); + /* Get necessary properties from property list */ + if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fill value"); + if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get data pipeline"); + /* * Setup indice to go through all chunks. (Future improvement * should allocate only chunks that have no file space assigned yet. @@ -2437,65 +2452,37 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, for (u=0, chunk_size=1; u<layout->ndims; u++) { chunk_offset[u]=0; chunk_size *= layout->dim[u]; - } + } /* end for */ /* Loop over all chunks */ - while (1) { - -#ifdef AKC - printf("Checking allocation for chunk( "); - for (u=0; u<layout->ndims; u++){ - printf("%ld ", chunk_offset[u]); - } - printf(")\n"); -#endif -#ifdef NO - if (H5F_istore_get_addr(f, layout, chunk_offset, &udata)<0) { -#endif - /* No file space assigned yet. Allocate it. */ - /* The following needs improvement like calling the */ - /* allocation directly rather than indirectly using the */ - /* allocation effect in the unlock process. */ + carry=0; + while (carry==0) { + /* No file space assigned yet. Allocate it. */ + /* The following needs improvement like calling the */ + /* allocation directly rather than indirectly using the */ + /* allocation effect in the unlock process. */ -#ifdef AKC - printf("need allocation\n"); -#endif - /* - * Lock the chunk, copy from application to chunk, then unlock the - * chunk. - */ + /* + * Lock the chunk, copy from application to chunk, then unlock the + * chunk. + */ #ifdef H5_HAVE_PARALLEL - /* rky 981207 Serialize access to this critical region. */ - if (SUCCEED!= H5FD_mpio_wait_for_left_neighbor(f->shared->lf)) { - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, - "unable to lock the data chunk"); - } + /* rky 981207 Serialize access to this critical region. */ + if (SUCCEED!= H5FD_mpio_wait_for_left_neighbor(f->shared->lf)) + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to lock the data chunk"); #endif - if (NULL==(chunk=H5F_istore_lock(f, dxpl_id, layout, pline, - fill, chunk_offset, FALSE, &idx_hint))) { - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, - "unable to read raw data chunk"); - } - H5_CHECK_OVERFLOW(chunk_size,hsize_t,size_t); - if (H5F_istore_unlock(f, dxpl_id, layout, pline, TRUE, - chunk_offset, &idx_hint, chunk, (size_t)chunk_size)<0) { - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, - "uanble to unlock raw data chunk"); - } + if (NULL==(chunk=H5F_istore_lock(f, dxpl_id, layout, &pline, + &fill, chunk_offset, FALSE, &idx_hint))) + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to read raw data chunk"); + + H5_CHECK_OVERFLOW(chunk_size,hsize_t,size_t); + if (H5F_istore_unlock(f, dxpl_id, layout, &pline, TRUE, + chunk_offset, &idx_hint, chunk, (size_t)chunk_size)<0) + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "uanble to unlock raw data chunk"); #ifdef H5_HAVE_PARALLEL - if (SUCCEED!= H5FD_mpio_signal_right_neighbor(f->shared->lf)) { - HRETURN_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, - "unable to unlock the data chunk"); - } -#endif -#ifdef NO - } else { -#ifdef AKC - printf("NO need for allocation\n"); - HDfprintf(stdout, "udata.addr=%a\n", udata.addr); -#endif - } + if (SUCCEED!= H5FD_mpio_signal_right_neighbor(f->shared->lf)) + HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to unlock the data chunk"); #endif /* Increment indices */ @@ -2506,10 +2493,8 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, } else { carry = 0; } - } - if (carry) - break; - } + } /* end for */ + } /* end while */ #ifdef H5_HAVE_PARALLEL /* @@ -2522,12 +2507,12 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, * removed, when H5D_init_storage is changed to call H5MF_alloc directly * to allocate space, instead of calling H5F_istore_unlock. */ - if (MPI_Barrier(H5FD_mpio_communicator(f->shared->lf))) { - HRETURN_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed"); - } + if (MPI_Barrier(H5FD_mpio_communicator(f->shared->lf))) + HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Barrier failed"); #endif - FUNC_LEAVE(SUCCEED); +done: + FUNC_LEAVE(ret_value); } @@ -2632,7 +2617,7 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, *------------------------------------------------------------------------- */ herr_t -H5F_istore_prune_by_extent(H5F_t *f, H5O_layout_t *layout, H5S_t * space) +H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * space) { H5F_rdcc_t *rdcc = &(f->shared->rdcc); /*raw data chunk cache */ H5F_rdcc_ent_t *ent = NULL, *next = NULL; /*cache entry */ @@ -2652,16 +2637,13 @@ H5F_istore_prune_by_extent(H5F_t *f, H5O_layout_t *layout, H5S_t * space) /* Go get the rank & dimensions */ if(H5S_get_simple_extent_dims(space, curr_dims, NULL) < 0) - HRETURN_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, - "can't get dataset dimensions"); - + HRETURN_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions"); /*------------------------------------------------------------------------- * Figure out what chunks are no longer in use for the specified extent * and release them from the linked list raw data cache *------------------------------------------------------------------------- */ - for(ent = rdcc->head; ent; ent = next) { next = ent->next; @@ -2830,8 +2812,8 @@ H5F_istore_remove(H5F_t *f, haddr_t addr, void *_lt_key /*in,out */ , *------------------------------------------------------------------------- */ herr_t -H5F_istore_initialize_by_extent(H5F_t *f, H5O_layout_t *layout, - H5O_pline_t * pline, H5O_fill_t * fill, H5S_t * space) +H5F_istore_initialize_by_extent(H5F_t *f, const H5O_layout_t *layout, + H5P_genplist_t *dc_plist, const H5S_t * space) { hid_t dxpl_id; /*dataset transfer property list */ uint8_t *chunk = NULL; /*the file chunk */ @@ -2853,6 +2835,9 @@ H5F_istore_initialize_by_extent(H5F_t *f, H5O_layout_t *layout, int i, carry; /*counters */ unsigned u; int found = 0; /*initialize this entry */ + H5O_pline_t pline; /* I/O pipeline information */ + H5O_fill_t fill; /* Fill value information */ + herr_t ret_value=SUCCEED; /* Return value */ FUNC_ENTER(H5F_istore_initialize_by_extent, FAIL); @@ -2862,20 +2847,24 @@ H5F_istore_initialize_by_extent(H5F_t *f, H5O_layout_t *layout, assert(layout->ndims > 0 && layout->ndims <= H5O_LAYOUT_NDIMS); assert(H5F_addr_defined(layout->addr)); assert(space); - assert(pline); - assert(fill); + /* Get necessary properties from property list */ + if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fill value"); + if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get data pipeline"); + + /* Reset start & count arrays */ HDmemset(start, 0, sizeof(start)); HDmemset(count, 0, sizeof(count)); /* Go get the rank & dimensions */ if((rank = H5S_get_simple_extent_dims(space, curr_dims, NULL)) < 0) - HRETURN_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, - "can't get dataset dimensions"); + HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions"); - for(i = 0; i < rank; i++) { + /* Copy current dimensions */ + for(i = 0; i < rank; i++) size[i] = curr_dims[i]; - } size[i] = layout->dim[i]; elm_size = size[i]; @@ -2883,15 +2872,10 @@ H5F_istore_initialize_by_extent(H5F_t *f, H5O_layout_t *layout, dxpl_id = H5P_DATASET_XFER_DEFAULT; /* Create a data space for a chunk & set the extent */ - if(NULL == (space_chunk = H5S_create(H5S_SIMPLE))) { - HRETURN_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, - "can't create simple dataspace"); - } - if(H5S_set_extent_simple(space_chunk, (unsigned)rank, layout->dim, - NULL) < 0) { - HRETURN_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, - "can't set dimensions"); - } + if(NULL == (space_chunk = H5S_create(H5S_SIMPLE))) + HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace"); + if(H5S_set_extent_simple(space_chunk, (unsigned)rank, layout->dim, NULL) < 0) + HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't set dimensions"); /* * Set up multi-dimensional counters (idx_min, idx_max, and idx_cur) and @@ -2902,87 +2886,68 @@ H5F_istore_initialize_by_extent(H5F_t *f, H5O_layout_t *layout, idx_min[u] = 0; idx_max[u] = (size[u] - 1) / layout->dim[u] + 1; idx_cur[u] = idx_min[u]; - } + } /* end for */ /* Loop over all chunks */ - while(1) { + carry=0; + while(carry==0) { for(u = 0, naccessed = 1; u < layout->ndims; u++) { /* The location and size of the chunk being accessed */ chunk_offset[u] = idx_cur[u] * (hssize_t)(layout->dim[u]); - sub_size[u] = - MIN((idx_cur[u] + 1) * layout->dim[u], + sub_size[u] = MIN((idx_cur[u] + 1) * layout->dim[u], size[u]) - chunk_offset[u]; naccessed *= sub_size[u]; - } + } /* end for */ /* * Figure out what chunks have to be initialized. These are the chunks where the database * extent boundary is within the chunk */ - for(u = 0, found = 0; u < layout->ndims - 1; u++) { end_chunk = chunk_offset[u] + layout->dim[u]; if(end_chunk > size[u]) { found = 1; break; } - } + } /* end for */ if(found) { - if(NULL == (chunk = - H5F_istore_lock(f, dxpl_id, layout, pline, fill, - chunk_offset, FALSE, &idx_hint))) { - HRETURN_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, - "unable to read raw data chunk"); - } + if(NULL == (chunk = H5F_istore_lock(f, dxpl_id, layout, &pline, &fill, + chunk_offset, FALSE, &idx_hint))) + HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to read raw data chunk"); - if(H5S_select_all(space_chunk) < 0) { - HRETURN_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, - "unable to select space"); - } + if(H5S_select_all(space_chunk) < 0) + HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to select space"); - for(i = 0; i < rank; i++) { - count[i] = - MIN((idx_cur[i] + 1) * layout->dim[i], - size[i] - chunk_offset[i]); - } + for(i = 0; i < rank; i++) + count[i] = MIN((idx_cur[i] + 1) * layout->dim[i], size[i] - chunk_offset[i]); #if defined (H5F_ISTORE_DEBUG) HDfputs("cache:initialize:offset:[", stdout); - for(u = 0; u < layout->ndims - 1; u++) { + for(u = 0; u < layout->ndims - 1; u++) HDfprintf(stdout, "%s%Hd", u ? ", " : "", chunk_offset[u]); - } HDfputs("]", stdout); HDfputs(":count:[", stdout); - for(u = 0; u < layout->ndims - 1; u++) { + for(u = 0; u < layout->ndims - 1; u++) HDfprintf(stdout, "%s%Hd", u ? ", " : "", count[u]); - } HDfputs("]\n", stdout); #endif if(H5S_select_hyperslab(space_chunk, H5S_SELECT_NOTB, start, NULL, - count, NULL) < 0) { - HRETURN_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, - "unable to select hyperslab"); - } + count, NULL) < 0) + HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to select hyperslab"); /* Fill the selection in the memory buffer */ - if(H5S_select_fill(fill->buf, fill->size, space_chunk, chunk) < 0) { - HRETURN_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, - "filling selection failed"); - } - - if(H5F_istore_unlock(f, dxpl_id, layout, pline, TRUE, - chunk_offset, &idx_hint, chunk, - (size_t)naccessed) < 0) { - HRETURN_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, - "unable to unlock raw data chunk"); - } + if(H5S_select_fill(fill.buf, fill.size, space_chunk, chunk) < 0) + HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "filling selection failed"); - } /*found */ + if(H5F_istore_unlock(f, dxpl_id, layout, &pline, TRUE, + chunk_offset, &idx_hint, chunk, (size_t)naccessed) < 0) + HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to unlock raw data chunk"); + } /*found */ /* Increment indices */ for(i = layout->ndims - 1, carry = 1; i >= 0 && carry; --i) { @@ -2990,14 +2955,12 @@ H5F_istore_initialize_by_extent(H5F_t *f, H5O_layout_t *layout, idx_cur[i] = idx_min[i]; else carry = 0; - } - if(carry) - break; - - } + } /* end for */ + } /* end while */ +done: if(space_chunk) H5S_close(space_chunk); - FUNC_LEAVE(SUCCEED); + FUNC_LEAVE(ret_value); } |