summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/Makefile.in10
-rw-r--r--examples/h5_reference.c146
2 files changed, 154 insertions, 2 deletions
diff --git a/examples/Makefile.in b/examples/Makefile.in
index ae67254..171c8bd 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -17,7 +17,7 @@ LIBHDF5=../src/libhdf5.la
# These are the programs that `make all' or `make tests' will build and which
# `make check' will run. List them in the order they should be run.
TEST_PROGS= h5_write h5_read h5_extend_write h5_chunk_read h5_compound \
- h5_group h5_select h5_attribute
+ h5_group h5_select h5_attribute h5_mount h5_reference
# These are the files that `make clean' (and derivatives) will remove from
# this directory.
@@ -27,7 +27,8 @@ CLEAN=*.h5 *.o *.lo
# created by replacing the `.c' with a `.o'. This list is necessary
# for building automatic dependencies.
TEST_SRC=h5_chunk_read.c h5_compound.c h5_extend_write.c h5_group.c \
- h5_read.c h5_write.c h5_select.c h5_attribute.c
+ h5_read.c h5_write.c h5_select.c h5_attribute.c h5_mount.c \
+ h5_reference.c
TEST_OBJ=$(PROG_SRC:.c=.lo)
@@ -57,4 +58,9 @@ h5_select: h5_select.lo
h5_attribute: h5_attribute.lo
@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5_attribute.lo $(LIBHDF5) $(LDFLAGS) $(LIBS)
+h5_mount: h5_mount.lo
+ @$(LT_LINK_EXE) $(CFLAGS) -o $@ h5_mount.lo $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5_reference: h5_reference.lo
+ @$(LT_LINK_EXE) $(CFLAGS) -o $@ h5_reference.lo $(LIBHDF5) $(LDFLAGS) $(LIBS)
@CONCLUDE@
diff --git a/examples/h5_reference.c b/examples/h5_reference.c
new file mode 100644
index 0000000..a69afe2
--- /dev/null
+++ b/examples/h5_reference.c
@@ -0,0 +1,146 @@
+ /*
+ * This program illustrates how references to the objects can be used.
+ * Program creates two datasets in the file. It also creates the third
+ * dataset, and references to the first two datasets are stored in it.
+ * Program reopens the file and reads dataset with the references.
+ * References are used to open first two datasets and read datatspace
+ * and datatype information about them.
+ *
+ */
+
+#include<hdf5.h>
+
+#define FILE "refere.h5"
+
+int
+main(void) {
+ hid_t fid; /* File, datasets, datatypes and */
+ hid_t did_a, sid_a; /* dataspaces identifiers for three */
+ hid_t did_b, tid_b, sid_b; /* datasets. */
+ hid_t did_r, tid_r, sid_r;
+ herr_t status;
+
+ hobj_ref_t *wbuf; /* buffer to write to disk */
+ hobj_ref_t *rbuf; /* buffer to read from disk */
+
+
+ hsize_t dim_r[1];
+ hsize_t dim_a[1];
+ hsize_t dim_b[2];
+
+ herr_t ret; /* return values */
+
+ /*
+ * Create a file using default properties.
+ */
+ fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /*
+ * Create dataset "A" in the file.
+ */
+ dim_a[0] = 5;
+ sid_a = H5Screate_simple(1, dim_a, NULL);
+ did_a = H5Dcreate(fid, "A", H5T_NATIVE_INT, sid_a, H5P_DEFAULT);
+
+ /*
+ * Create dataset "B" in the file.
+ */
+ dim_b[0] = 2;
+ dim_b[1] = 6;
+ sid_b = H5Screate_simple(2, dim_b, NULL);
+ did_b = H5Dcreate(fid, "B", H5T_NATIVE_FLOAT, sid_b, H5P_DEFAULT);
+
+ /*
+ * Create dataset "R" to store references to the datasets "A" and "B".
+ */
+ dim_r[0] = 2;
+ sid_r = H5Screate_simple(1, dim_r, NULL);
+ tid_r = H5Tcopy(H5T_STD_REF_OBJ);
+ did_r = H5Dcreate(fid, "R", tid_r, sid_r, H5P_DEFAULT );
+
+ /*
+ * Allocate write and read buffers.
+ */
+ wbuf = malloc(sizeof(hobj_ref_t)*2);
+ rbuf = malloc(sizeof(hobj_ref_t)*2);
+
+ /*
+ * Create references to the datasets "A" and "B"
+ * and store them in the wbuf.
+ */
+ H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, -1);
+ H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, -1);
+
+ /*
+ * Write dataset R using default transfer properties.
+ */
+ status = H5Dwrite(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL,
+ H5P_DEFAULT, wbuf);
+
+ /*
+ * Close all objects.
+ */
+ H5Sclose(sid_a);
+ H5Dclose(did_a);
+
+ H5Sclose(sid_b);
+ H5Dclose(did_b);
+
+ H5Tclose(tid_r);
+ H5Sclose(sid_r);
+ H5Dclose(did_r);
+
+ H5Fclose(fid);
+
+ /*
+ * Reopen the file.
+ */
+ fid = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+ /*
+ * Open and read dataset "R".
+ */
+ did_r = H5Dopen(fid, "R");
+ status = H5Dread(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL,
+ H5P_DEFAULT, rbuf);
+
+ /*
+ * Open dataset A using reference to it.
+ */
+ did_a = H5Rdereference(did_r, H5R_OBJECT, &rbuf[0]);
+
+ /*
+ * Get rank of the dataset "A"
+ */
+
+ printf("\n");
+ sid_a = H5Dget_space(did_a);
+ ret = H5Sget_simple_extent_ndims(sid_a);
+
+ if(ret == 1) printf("Rank of A is %d.\n", ret);
+ printf("\n");
+
+ /*
+ * Get datatype of the dataset "B"
+ */
+ did_b = H5Rdereference(did_r, H5R_OBJECT, &rbuf[1]);
+ tid_b = H5Dget_type(did_b);
+ if(H5Tequal(tid_b, H5T_NATIVE_FLOAT))
+ printf("Datatype of B is H5T_NATIVE_FLOAT.\n");
+ printf("\n");
+
+ /*
+ * Close all objects.
+ */
+ H5Dclose(did_a);
+ H5Sclose(sid_a);
+ H5Dclose(did_b);
+ H5Tclose(tid_b);
+ H5Fclose(fid);
+
+ return 0;
+
+ }
+
+
+