summaryrefslogtreecommitdiffstats
path: root/src/H5Shyper.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2001-08-10 20:47:05 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2001-08-10 20:47:05 (GMT)
commit95862451f78960cab031031011e5c6a131e0d026 (patch)
tree391101ca102fbecbfe9cee1f608b90bb87d49b1a /src/H5Shyper.c
parent4049965d1337bc54a21a4d3af71aa793e4baf029 (diff)
downloadhdf5-95862451f78960cab031031011e5c6a131e0d026.zip
hdf5-95862451f78960cab031031011e5c6a131e0d026.tar.gz
hdf5-95862451f78960cab031031011e5c6a131e0d026.tar.bz2
[svn-r4324] Purpose:
New Features! Description: Start migrating the internal use of property lists in the library from the older implementation to the new generic property lists. Currently, only the dataset transfer property lists are migrated to the new architecture, all the rest of the property list types are still using the older architecture. Also, the backward compatibility features are not implemented yet, so applications which use dataset transfer properties may need to make the following changes: H5Pcreate(H5P_DATASET_XFER) -> H5Pcreate_list(H5P_DATASET_XFER_NEW) and H5Pclose(<a dataset transfer property list>) -> H5Pclose_list(id) This still may have some bugs in it, especially with Fortran, but I should be wrapping up those later today. Platforms tested: FreeBSD 4.4 (hawkwind)
Diffstat (limited to 'src/H5Shyper.c')
-rw-r--r--src/H5Shyper.c94
1 files changed, 44 insertions, 50 deletions
diff --git a/src/H5Shyper.c b/src/H5Shyper.c
index 6b59f24..06c7f08 100644
--- a/src/H5Shyper.c
+++ b/src/H5Shyper.c
@@ -609,17 +609,18 @@ H5S_hyper_fread (intn dim, H5S_hyper_io_info_t *io_info)
uintn u;
#endif /* QAK */
hsize_t num_read=0; /* Number of elements read */
- const H5D_xfer_t *xfer_parms;/* Data transfer property list */
+ uintn cache_hyper; /* Hyperslab caching turned on? */
+ uintn block_limit; /* Hyperslab cache limit */
FUNC_ENTER (H5S_hyper_fread, 0);
assert(io_info);
- if (H5P_DEFAULT==io_info->dxpl_id) {
- xfer_parms = &H5D_xfer_dflt;
- } else {
- xfer_parms = H5I_object(io_info->dxpl_id);
- assert(xfer_parms);
- }
+
+ /* Get the hyperslab cache setting and limit */
+ if (H5P_get(io_info->dxpl_id,H5D_XFER_HYPER_CACHE_NAME,&cache_hyper)<0)
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTGET, 0, "unable to get value");
+ if (H5P_get(io_info->dxpl_id,H5D_XFER_HYPER_CACHE_LIM_NAME,&block_limit)<0)
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTGET, 0, "unable to get value");
#ifdef QAK
printf("%s: check 1.0, dim=%d\n",FUNC,dim);
@@ -672,9 +673,8 @@ H5S_hyper_fread (intn dim, H5S_hyper_io_info_t *io_info)
#endif /* QAK */
/* Check if this hyperslab block is cached or could be cached */
if(!regions[i].node->cinfo.cached &&
- (xfer_parms->cache_hyper &&
- (xfer_parms->block_limit==0 ||
- xfer_parms->block_limit>=(regions[i].node->cinfo.size*io_info->elmt_size)))) {
+ (cache_hyper &&
+ (block_limit==0 || block_limit>=(regions[i].node->cinfo.size*io_info->elmt_size)))) {
/* if we aren't cached, attempt to cache the block */
#ifdef QAK
printf("%s: check 2.1.3, caching block\n",FUNC);
@@ -992,7 +992,7 @@ H5S_hyper_fread_opt (H5F_t *f, const struct H5O_layout_t *layout,
#ifndef NO_DUFFS_DEVICE
size_t duffs_index; /* Counting index for Duff's device */
#endif /* NO_DUFFS_DEVICE */
- const H5D_xfer_t *xfer_parms;/* Data transfer property list */
+ size_t vector_size; /* Value for vector size */
hsize_t ret_value=0; /* Return value */
FUNC_ENTER (H5S_hyper_fread_opt, 0);
@@ -1011,18 +1011,14 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
printf("%s: file_file->hyp.pos[%d]=%d\n",FUNC,(int)i,(int)file_iter->hyp.pos[i]);
#endif /* QAK */
- /* Get the data transfer properties */
- if (H5P_DEFAULT==dxpl_id) {
- xfer_parms = &H5D_xfer_dflt;
- } else {
- xfer_parms = H5I_object(dxpl_id);
- assert(xfer_parms);
- } /* end else */
+ /* Get the hyperslab vector size */
+ if (H5P_get(dxpl_id,H5D_XFER_HYPER_VECTOR_SIZE_NAME,&vector_size)<0)
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTGET, 0, "unable to get value");
/* Allocate the vector I/O arrays */
- if((seq_len_arr = H5FL_ARR_ALLOC(size_t,xfer_parms->vector_size,0))==NULL)
+ if((seq_len_arr = H5FL_ARR_ALLOC(size_t,vector_size,0))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate vector I/O array");
- if((buf_off_arr = H5FL_ARR_ALLOC(hsize_t,xfer_parms->vector_size,0))==NULL)
+ if((buf_off_arr = H5FL_ARR_ALLOC(hsize_t,vector_size,0))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate vector I/O array");
/* Set the rank of the fastest changing dimension */
@@ -1186,7 +1182,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
skip[i]=(tdiminfo[i].stride-tdiminfo[i].block)*slab[i];
/* Fill the sequence length array (since they will all be the same for optimized hyperslabs) */
- for(u=0; u<xfer_parms->vector_size; u++)
+ for(u=0; u<vector_size; u++)
seq_len_arr[u]=actual_bytes;
/* Read in data until an entire sequence can't be read in any longer */
@@ -1205,7 +1201,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
/* Gather the sequence */
/* Compute the number of sequences to fill */
- tot_seq=MIN(xfer_parms->vector_size-nseq,fast_dim_count);
+ tot_seq=MIN(vector_size-nseq,fast_dim_count);
/* Get a copy of the number of sequences to fill */
seq_count=tot_seq;
@@ -1308,7 +1304,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
fast_dim_count -= tot_seq;
/* If the sequence & offset arrays are full, read them in */
- if(nseq>=xfer_parms->vector_size) {
+ if(nseq>=vector_size) {
/* Read in the sequences */
if (H5F_seq_readv(f, dxpl_id, layout, pline, fill, efl, file_space,
elmt_size, nseq, seq_len_arr, buf_off_arr, buf/*out*/)<0) {
@@ -1350,7 +1346,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
/* Gather the sequence */
/* Compute the number of sequences to fill */
- tot_seq=MIN(xfer_parms->vector_size-nseq,fast_dim_count);
+ tot_seq=MIN(vector_size-nseq,fast_dim_count);
/* Get a copy of the number of sequences to fill */
seq_count=tot_seq;
@@ -1380,7 +1376,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
fast_dim_count -= tot_seq;
/* If the sequence & offset arrays are full, read them in */
- if(nseq>=xfer_parms->vector_size) {
+ if(nseq>=vector_size) {
/* Read in the sequences */
if (H5F_seq_readv(f, dxpl_id, layout, pline, fill, efl, file_space,
elmt_size, nseq, seq_len_arr, buf_off_arr, buf/*out*/)<0) {
@@ -1424,7 +1420,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
nseq++;
/* If the sequence & offset arrays are full, read them in */
- if(nseq>=xfer_parms->vector_size) {
+ if(nseq>=vector_size) {
/* Read in the sequences */
if (H5F_seq_readv(f, dxpl_id, layout, pline, fill, efl, file_space,
elmt_size, nseq, seq_len_arr, buf_off_arr, buf/*out*/)<0) {
@@ -1638,17 +1634,19 @@ H5S_hyper_fwrite (intn dim, H5S_hyper_io_info_t *io_info)
size_t i; /* Counters */
intn j;
hsize_t num_written=0; /* Number of elements read */
- const H5D_xfer_t *xfer_parms; /* Data transfer properties */
+ uintn cache_hyper; /* Hyperslab caching turned on? */
+ uintn block_limit; /* Hyperslab cache limit */
FUNC_ENTER (H5S_hyper_fwrite, 0);
assert(io_info);
- if (H5P_DEFAULT==io_info->dxpl_id) {
- xfer_parms = &H5D_xfer_dflt;
- } else {
- xfer_parms = H5I_object(io_info->dxpl_id);
- assert(xfer_parms);
- }
+
+ /* Get the hyperslab cache setting and limit */
+ if (H5P_get(io_info->dxpl_id,H5D_XFER_HYPER_CACHE_NAME,&cache_hyper)<0)
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTGET, 0, "unable to get value");
+ if (H5P_get(io_info->dxpl_id,H5D_XFER_HYPER_CACHE_LIM_NAME,&block_limit)<0)
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTGET, 0, "unable to get value");
+
#ifdef QAK
printf("%s: check 1.0\n", FUNC);
@@ -1682,7 +1680,7 @@ H5S_hyper_fwrite (intn dim, H5S_hyper_io_info_t *io_info)
region_size=MIN((hssize_t)io_info->nelmts, (regions[i].end-regions[i].start)+1);
/* Check if this hyperslab block is cached or could be cached */
- if(!regions[i].node->cinfo.cached && (xfer_parms->cache_hyper && (xfer_parms->block_limit==0 || xfer_parms->block_limit>=(regions[i].node->cinfo.size*io_info->elmt_size)))) {
+ if(!regions[i].node->cinfo.cached && (cache_hyper && (block_limit==0 || block_limit>=(regions[i].node->cinfo.size*io_info->elmt_size)))) {
/* if we aren't cached, attempt to cache the block */
H5S_hyper_block_cache(regions[i].node,io_info,0);
} /* end if */
@@ -1837,7 +1835,7 @@ H5S_hyper_fwrite_opt (H5F_t *f, const struct H5O_layout_t *layout,
#ifndef NO_DUFFS_DEVICE
size_t duffs_index; /* Counting index for Duff's device */
#endif /* NO_DUFFS_DEVICE */
- const H5D_xfer_t *xfer_parms;/* Data transfer property list */
+ size_t vector_size; /* Value for vector size */
hsize_t ret_value=0; /* Return value */
FUNC_ENTER (H5S_hyper_fwrite_opt, 0);
@@ -1856,18 +1854,14 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
printf("%s: file_file->hyp.pos[%d]=%d\n",FUNC,(int)i,(int)file_iter->hyp.pos[i]);
#endif /* QAK */
- /* Get the data transfer properties */
- if (H5P_DEFAULT==dxpl_id) {
- xfer_parms = &H5D_xfer_dflt;
- } else {
- xfer_parms = H5I_object(dxpl_id);
- assert(xfer_parms);
- } /* end else */
+ /* Get the hyperslab vector size */
+ if (H5P_get(dxpl_id,H5D_XFER_HYPER_VECTOR_SIZE_NAME,&vector_size)<0)
+ HRETURN_ERROR(H5E_PLIST, H5E_CANTGET, 0, "unable to get value");
/* Allocate the vector I/O arrays */
- if((seq_len_arr = H5FL_ARR_ALLOC(size_t,xfer_parms->vector_size,0))==NULL)
+ if((seq_len_arr = H5FL_ARR_ALLOC(size_t,vector_size,0))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate vector I/O array");
- if((buf_off_arr = H5FL_ARR_ALLOC(hsize_t,xfer_parms->vector_size,0))==NULL)
+ if((buf_off_arr = H5FL_ARR_ALLOC(hsize_t,vector_size,0))==NULL)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate vector I/O array");
/* Set the rank of the fastest changing dimension */
@@ -2031,7 +2025,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
skip[i]=(tdiminfo[i].stride-tdiminfo[i].block)*slab[i];
/* Fill the sequence length array (since they will all be the same for optimized hyperslabs) */
- for(u=0; u<xfer_parms->vector_size; u++)
+ for(u=0; u<vector_size; u++)
seq_len_arr[u]=actual_bytes;
/* Write out data until an entire sequence can't be written any longer */
@@ -2050,7 +2044,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
/* Gather the sequence */
/* Compute the number of sequences to fill */
- tot_seq=MIN(xfer_parms->vector_size-nseq,fast_dim_count);
+ tot_seq=MIN(vector_size-nseq,fast_dim_count);
/* Get a copy of the number of sequences to fill */
seq_count=tot_seq;
@@ -2153,7 +2147,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
fast_dim_count -= tot_seq;
/* If the sequence & offset arrays are full, write them out */
- if(nseq>=xfer_parms->vector_size) {
+ if(nseq>=vector_size) {
/* Write out the sequences */
if (H5F_seq_writev(f, dxpl_id, layout, pline, fill, efl, file_space,
elmt_size, nseq, seq_len_arr, buf_off_arr, buf)<0) {
@@ -2195,7 +2189,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
/* Gather the sequence */
/* Compute the number of sequences to fill */
- tot_seq=MIN(xfer_parms->vector_size-nseq,fast_dim_count);
+ tot_seq=MIN(vector_size-nseq,fast_dim_count);
/* Get a copy of the number of sequences to fill */
seq_count=tot_seq;
@@ -2225,7 +2219,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
fast_dim_count -= tot_seq;
/* If the sequence & offset arrays are full, write them out */
- if(nseq>=xfer_parms->vector_size) {
+ if(nseq>=vector_size) {
/* Write out the sequences */
if (H5F_seq_writev(f, dxpl_id, layout, pline, fill, efl, file_space,
elmt_size, nseq, seq_len_arr, buf_off_arr, buf)<0) {
@@ -2269,7 +2263,7 @@ for(i=0; i<file_space->extent.u.simple.rank; i++)
nseq++;
/* If the sequence & offset arrays are full, write them out */
- if(nseq>=xfer_parms->vector_size) {
+ if(nseq>=vector_size) {
/* Write out the sequences */
if (H5F_seq_writev(f, dxpl_id, layout, pline, fill, efl, file_space,
elmt_size, nseq, seq_len_arr, buf_off_arr, buf)<0) {