diff options
Diffstat (limited to 'tools/h5repack/testh5repack_filters.c')
-rw-r--r-- | tools/h5repack/testh5repack_filters.c | 213 |
1 files changed, 101 insertions, 112 deletions
diff --git a/tools/h5repack/testh5repack_filters.c b/tools/h5repack/testh5repack_filters.c index 7b7837b..5a26f5d 100644 --- a/tools/h5repack/testh5repack_filters.c +++ b/tools/h5repack/testh5repack_filters.c @@ -22,144 +22,162 @@ #define CDIM2 DIM2/2 #define RANK 2 +/*------------------------------------------------------------------------- + * Function: make_dset + * + * Purpose: utility function to create and write a dataset in LOC_ID + *------------------------------------------------------------------------- + */ +static +int make_dset(hid_t loc_id,const char *name,hid_t sid, hid_t dcpl,void *buf) +{ + hid_t dsid; + /* create the dataset */ + if((dsid = H5Dcreate (loc_id,name,H5T_NATIVE_INT,sid,dcpl))<0) + return -1; + /* write */ + if(H5Dwrite(dsid,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) + goto out; + /* close */ + if(H5Dclose(dsid)<0) + return -1; + return 0; + out: + H5E_BEGIN_TRY { + H5Dclose(dsid); + } H5E_END_TRY; + return -1; + +} /*------------------------------------------------------------------------- - * Function: make_deflate + * Function: make_filters * - * Purpose: make a dataset using DEFLATE (GZIP) compression in LOC_ID + * Purpose: make several datasets with filters in location LOC_ID * *------------------------------------------------------------------------- */ -int make_deflate(hid_t loc_id) +int make_filters(hid_t loc_id) { hid_t dcpl; /* dataset creation property list */ - hid_t dsid; /* dataset ID */ hid_t sid; /* dataspace ID */ + unsigned szip_options_mask=H5_SZIP_ALLOW_K13_OPTION_MASK|H5_SZIP_NN_OPTION_MASK; + unsigned szip_pixels_per_block=8; hsize_t dims[RANK]={DIM1,DIM2}; hsize_t chunk_dims[RANK]={CDIM1,CDIM2}; int buf[DIM1][DIM2]; - int i, j, n=0; + char name[5]; + int i, j, n; - for (i=0; i<DIM1; i++){ + for (i=n=0; i<DIM1; i++){ for (j=0; j<DIM2; j++){ buf[i][j]=n++; } } - + /* create a space */ if((sid = H5Screate_simple(RANK, dims, NULL))<0) return -1; - - /* create the dataset creation property list */ + /* create a dataset creation property list; the same DCPL is used for all dsets */ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto out; - - /* set up for deflated data */ + /* set up chunk */ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0) goto out; - if(H5Pset_deflate(dcpl, 9)<0) - goto out; - /* create the dataset */ - if((dsid = H5Dcreate (loc_id, "dset_gzip", H5T_NATIVE_INT, sid, dcpl))<0) +/*------------------------------------------------------------------------- + * make several dataset with no filters + *------------------------------------------------------------------------- + */ + for (i=0; i<4; i++) + { + sprintf(name,"dset%d",i+1); + if (write_dset(loc_id,RANK,dims,name,H5T_NATIVE_INT,buf)<0) + return -1; + } +/*------------------------------------------------------------------------- + * SZIP + *------------------------------------------------------------------------- + */ + /* set szip data */ + if(H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block)<0) + goto out; + if (make_dset(loc_id,"dset_szip",sid,dcpl,buf)<0) goto out; - /* write the data to the dataset */ - if(H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0) +/*------------------------------------------------------------------------- + * GZIP + *------------------------------------------------------------------------- + */ + /* remove the filters from the dcpl */ + if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0) goto out; - - /* close */ - if(H5Dclose(dsid)<0) + /* set deflate data */ + if(H5Pset_deflate(dcpl, 9)<0) + goto out; + if (make_dset(loc_id,"dset_gzip",sid,dcpl,buf)<0) goto out; /*------------------------------------------------------------------------- - * close + * shuffle *------------------------------------------------------------------------- */ - - if(H5Sclose(sid)<0) + /* remove the filters from the dcpl */ + if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0) goto out; - if(H5Pclose(dcpl)<0) + /* set the shuffle filter */ + if (H5Pset_shuffle(dcpl)<0) + goto out; + if (make_dset(loc_id,"dset_shuffle",sid,dcpl,buf)<0) goto out; - - return 0; - -out: - H5E_BEGIN_TRY { - H5Dclose(dsid); - H5Pclose(dcpl); - H5Sclose(sid); - } H5E_END_TRY; - return -1; -} /*------------------------------------------------------------------------- - * Function: make_szip - * - * Purpose: make a dataset using SZIP compression in LOC_ID - * + * checksum *------------------------------------------------------------------------- */ -int make_szip(hid_t loc_id) -{ - hid_t dcpl; /* dataset creation property list */ - hid_t dsid; /* dataset ID */ - hid_t sid; /* dataspace ID */ - unsigned szip_options_mask=H5_SZIP_ALLOW_K13_OPTION_MASK|H5_SZIP_NN_OPTION_MASK; - unsigned szip_pixels_per_block; - hsize_t dims[RANK]={DIM1,DIM2}; - hsize_t chunk_dims[RANK]={CDIM1,CDIM2}; - int buf[DIM1][DIM2]; - int i, j, n=0; - - for (i=0; i<DIM1; i++){ - for (j=0; j<DIM2; j++){ - buf[i][j]=n++; - } - } - - /* - pixels_per_block must be an even number, and <= pixels_per_scanline - and <= MAX_PIXELS_PER_BLOCK - */ - szip_pixels_per_block=8; - - /* create a space */ - if((sid = H5Screate_simple(RANK, dims, NULL))<0) - return -1; - - /* create the dataset creation property list */ - if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) + /* remove the filters from the dcpl */ + if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0) goto out; - - /* set up for sziped data */ - if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0) + /* set the checksum filter */ + if (H5Pset_fletcher32(dcpl)<0) goto out; - if(H5Pset_szip (dcpl, szip_options_mask, szip_pixels_per_block)<0) + if (make_dset(loc_id,"dset_fletcher32",sid,dcpl,buf)<0) goto out; - /* create the dataset */ - if((dsid = H5Dcreate (loc_id, "dset_szip", H5T_NATIVE_INT, sid, dcpl))<0) +/*------------------------------------------------------------------------- + * shuffle + checksum + SZIP + *------------------------------------------------------------------------- + */ + /* remove the filters from the dcpl */ + if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0) goto out; - - /* write the data to the dataset */ - if(H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0) + /* set the shuffle filter */ + if (H5Pset_shuffle(dcpl)<0) goto out; - - /* close */ - if(H5Dclose(dsid)<0) + /* set the checksum filter */ + if (H5Pset_fletcher32(dcpl)<0) goto out; - if(H5Pclose(dcpl)<0) + /* set szip data */ + if(H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block)<0) goto out; + if (make_dset(loc_id,"dset_all",sid,dcpl,buf)<0) + goto out; + + +/*------------------------------------------------------------------------- + * close space and dcpl + *------------------------------------------------------------------------- + */ if(H5Sclose(sid)<0) goto out; + if(H5Pclose(dcpl)<0) + goto out; return 0; out: H5E_BEGIN_TRY { - H5Dclose(dsid); H5Pclose(dcpl); H5Sclose(sid); } H5E_END_TRY; @@ -167,35 +185,6 @@ out: } -/*------------------------------------------------------------------------- - * Function: make_nofilters - * - * Purpose: make several dataset with no filters - * - *------------------------------------------------------------------------- - */ -int make_nofilters(hid_t loc_id) -{ - char name[5]; - hsize_t dims[RANK]={DIM1,DIM2}; - int buf[DIM1][DIM2]; - int i, j, n=0; - for (i=0; i<DIM1; i++){ - for (j=0; j<DIM2; j++){ - buf[i][j]=n++; - } - } - - for (i=0; i<4; i++) - { - sprintf(name,"dset%d",i+1); - if (write_dset(loc_id,RANK,dims,name,H5T_NATIVE_INT,buf)<0) - return -1; - } - - - return 0; -} |