diff options
author | Barbara Jones <bljones@hdfgroup.org> | 2001-03-20 18:20:12 (GMT) |
---|---|---|
committer | Barbara Jones <bljones@hdfgroup.org> | 2001-03-20 18:20:12 (GMT) |
commit | 9147dd1ae8a3a5d91194f792ac13cebf8e9d0dc6 (patch) | |
tree | 864f6d725a74bb6ff1c3aeeb60b7c3f68e431d91 /doc/html | |
parent | 8fbdc7fbe34fab90b2b8908d1d8187b897845b5f (diff) | |
download | hdf5-9147dd1ae8a3a5d91194f792ac13cebf8e9d0dc6.zip hdf5-9147dd1ae8a3a5d91194f792ac13cebf8e9d0dc6.tar.gz hdf5-9147dd1ae8a3a5d91194f792ac13cebf8e9d0dc6.tar.bz2 |
[svn-r3672] Description:
h5_ref2reg.c was missing
Diffstat (limited to 'doc/html')
-rw-r--r-- | doc/html/Tutor/examples/h5_ref2reg.c | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/doc/html/Tutor/examples/h5_ref2reg.c b/doc/html/Tutor/examples/h5_ref2reg.c new file mode 100644 index 0000000..9dcaff5 --- /dev/null +++ b/doc/html/Tutor/examples/h5_ref2reg.c @@ -0,0 +1,180 @@ +/* + This program shows how to create, store and dereference references + to the dataset regions. + + It creates a file and writes a two dimensional integer dataset + to it. Then it creates a dataset to store region references in. It + stores references to a hyperslab and 3 points selected (for the + integer dataset previously created). + + It then reopens the references dataset, reads and dereferences the + region references, and then reads and displays the selected hyperslab + and selected elements data from the integer dataset. +*/ + +#include <hdf5.h> + +#define filename "REF_REG.h5" +#define dsetnamev "MATRIX" +#define dsetnamer "REGION_REFERENCES" + +int main() +{ + hid_t file_id; /* file identifier */ + hid_t space_id; /* dataspace identifiers */ + hid_t spacer_id; + hid_t dsetv_id; /*dataset identifiers*/ + hid_t dsetr_id; + hsize_t dims[2] = {2,9}; + hsize_t dimsr[1] = {2}; + int rank = 2; + int rankr =1; + herr_t status; + hdset_reg_ref_t ref[2]; + hdset_reg_ref_t ref_out[2]; + int data[2][9] = {1,1,2,3,3,4,5,5,6,1,2,2,3,4,4,5,6,6}; + int data_out[2][9] = {0}; + hssize_t start[2]; + hsize_t count[2]; + hssize_t coord[2][3] = {0, 0, 1, 6, 0, 8}; + int num_points = 3; + int i, j; + + /* + * Create file with default file access and file creation properties. + */ + file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create dataspace for datasets. + */ + space_id = H5Screate_simple(rank, dims, NULL); + spacer_id = H5Screate_simple(rankr, dimsr, NULL); + + /* + * Create integer dataset. + */ + dsetv_id = H5Dcreate(file_id, dsetnamev, H5T_NATIVE_INT, space_id, H5P_DEFAULT); + + /* + * Write data to the dataset. + */ + status = H5Dwrite(dsetv_id, H5T_NATIVE_INT, H5S_ALL , H5S_ALL, H5P_DEFAULT,data); + status = H5Dclose(dsetv_id); + + /* + * Dataset with references. + */ + dsetr_id = H5Dcreate(file_id, dsetnamer, H5T_STD_REF_DSETREG, spacer_id, H5P_DEFAULT); + + /* + * Create a reference to the hyperslab. + */ + start[0] = 0; + start[1] = 3; + count[0] = 2; + count[1] = 3; + status = H5Sselect_hyperslab(space_id,H5S_SELECT_SET,start,NULL,count,NULL); + status = H5Rcreate(&ref[0], file_id, dsetnamev, H5R_DATASET_REGION, space_id); + + /* + * Create a reference to elements selection. + */ + status = H5Sselect_none(space_id); + status = H5Sselect_elements(space_id, H5S_SELECT_SET,num_points, + (const hssize_t **)coord); + status = H5Rcreate(&ref[1], file_id, dsetnamev, H5R_DATASET_REGION, space_id); + + /* + * Write dataset with the references. + */ + status = H5Dwrite(dsetr_id, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, H5P_DEFAULT,ref); + + /* + * Close all objects. + */ + status = H5Sclose(space_id); + status = H5Sclose(spacer_id); + status = H5Dclose(dsetr_id); + status = H5Fclose(file_id); + + /* + * Reopen the file to read selections back. + */ + file_id = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT); + + /* + * Reopen the dataset with object references and read references + * to the buffer. + */ + dsetr_id = H5Dopen (file_id, dsetnamer); + + status = H5Dread(dsetr_id, H5T_STD_REF_DSETREG, H5S_ALL, H5S_ALL, + H5P_DEFAULT, ref_out); + + /* + * Dereference the first reference. + */ + dsetv_id = H5Rdereference(dsetr_id, H5R_DATASET_REGION, &ref_out[0]); + space_id = H5Rget_region(dsetr_id, H5R_DATASET_REGION,&ref_out[0]); + + /* + * Read and display hyperslab selection from the dataset. + */ + + status = H5Dread(dsetv_id, H5T_NATIVE_INT, H5S_ALL, space_id, + H5P_DEFAULT, data_out); + printf("Selected hyperslab: "); + for (i = 0; i <= 1; i++) + { + printf("\n"); + for (j = 0; j <= 8; j++) + printf("%d ", data_out[i][j]); + } + printf("\n"); + + /* + * Close dataspace and the dataset. + */ + status = H5Sclose(space_id); + status = H5Dclose(dsetv_id); + + /* + * Initialize data_out array again to get point selection. + */ + for (i = 0; i <= 1; i++) + for (j = 0; j <= 8; j++) + data_out[i][j] = 0; + + /* + * Dereference the second reference. + */ + dsetv_id = H5Rdereference(dsetr_id, H5R_DATASET_REGION, &ref_out[1]); + space_id = H5Rget_region(dsetv_id, H5R_DATASET_REGION,&ref_out[1]); + + /* + * Read selected data from the dataset. + */ + + status = H5Dread(dsetv_id, H5T_NATIVE_INT, H5S_ALL, space_id, + H5P_DEFAULT, data_out); + printf("Selected points: "); + for (i = 0; i <= 1; i++) + { + printf("\n"); + for (j = 0; j <= 8; j++) + printf("%d ", data_out[i][j]); + } + printf("\n"); + + /* + * Close dataspace and the dataset. + */ + status = H5Sclose(space_id); + status = H5Dclose(dsetv_id); + status = H5Dclose(dsetr_id); + status = H5Fclose(file_id); + + return 0; +} + |