00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <assert.h>
00011 #include "hdf5.h"
00012
00013
00014 #define FILENAME "test.h5"
00015 #define DSET_NAME_COMP "comp"
00016 #define DSET_NAME_INT "int"
00017 #define DSET_NAME_FLOAT "float"
00018 #define GRP_NAME "group"
00019
00020 #define RANK 2
00021 #define DIM0 20
00022 #define DIM1 50
00023
00024 int attach_attribute(hid_t oid)
00025 {
00026 hid_t sid, aid;
00027 hsize_t dims = DIM0;
00028 int i, buf_int[DIM0];
00029 float buf_float[DIM0];
00030 herr_t status;
00031
00032 for (i=0; i<DIM0; i++) {
00033 buf_int[i] = i*6;
00034 buf_float[i] = i/6.0;
00035 }
00036
00037 sid = H5Screate_simple(1, &dims, NULL);
00038
00039 aid = H5Acreate(oid, "ints", H5T_NATIVE_INT, sid, H5P_DEFAULT);
00040 status = H5Awrite(aid, H5T_NATIVE_INT, buf_int);
00041 H5Aclose(aid);
00042
00043 aid = H5Acreate(oid, "floats", H5T_NATIVE_FLOAT, sid, H5P_DEFAULT);
00044 status = H5Awrite(aid, H5T_NATIVE_FLOAT, buf_float);
00045 H5Aclose(aid);
00046
00047 H5Sclose(sid);
00048
00049 return status;
00050 }
00051
00052 int create_ds_int(hid_t loc_id)
00053 {
00054 hid_t sid, did;
00055 herr_t status;
00056 hsize_t dims[] = {DIM0, DIM1};
00057 int i, j, buf[DIM0][DIM1];
00058
00059 for (i = 0; i < DIM0; i++) {
00060 for (j = 0; j < DIM1; j++)
00061 buf[i][j] = i * 6 + j + 1;
00062 }
00063
00064 sid = H5Screate_simple(2, dims, NULL);
00065
00066 did = H5Dcreate(loc_id, DSET_NAME_INT, H5T_NATIVE_INT, sid, H5P_DEFAULT);
00067 status = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
00068 attach_attribute(did);
00069
00070 status = H5Dclose(did);
00071 status = H5Sclose(sid);
00072
00073 return status;
00074 }
00075
00076 int create_ds_float(hid_t loc_id)
00077 {
00078 hid_t sid, did;
00079 herr_t status;
00080 hsize_t dims[] = {DIM0, DIM1};
00081 int i, j;
00082 float buf[DIM0][DIM1];
00083
00084 for (i = 0; i < DIM0; i++) {
00085 for (j = 0; j < DIM1; j++)
00086 buf[i][j] = i / 6.0 + j + 1.0;
00087 }
00088
00089 sid = H5Screate_simple(2, dims, NULL);
00090
00091 did = H5Dcreate(loc_id, DSET_NAME_FLOAT, H5T_NATIVE_FLOAT, sid, H5P_DEFAULT);
00092 status = H5Dwrite(did, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
00093 attach_attribute(did);
00094
00095 status = H5Dclose(did);
00096 status = H5Sclose(sid);
00097
00098 return status;
00099 }
00100
00101
00102 int create_ds_comp(hid_t loc_id)
00103 {
00104
00105 typedef struct comp_t { int a; float b; double c; } comp_t;
00106
00107 int i;
00108 comp_t buf[DIM0];
00109 hid_t did, sid, tid;
00110 herr_t status;
00111 hsize_t dim[] = {DIM0};
00112
00113
00114
00115
00116 for (i = 0; i< DIM0; i++) {
00117 buf[i].a = i;
00118 buf[i].b = i*i;
00119 buf[i].c = 1./(i+1);
00120 }
00121
00122 sid = H5Screate_simple(1, dim, NULL);
00123 tid = H5Tcreate (H5T_COMPOUND, sizeof(comp_t));
00124
00125 H5Tinsert(tid, "int", HOFFSET(comp_t, a), H5T_NATIVE_INT);
00126 H5Tinsert(tid, "double", HOFFSET(comp_t, c), H5T_NATIVE_DOUBLE);
00127 H5Tinsert(tid, "float", HOFFSET(comp_t, b), H5T_NATIVE_FLOAT);
00128 did = H5Dcreate(loc_id, DSET_NAME_COMP, tid, sid, H5P_DEFAULT);
00129 status = H5Dwrite(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
00130 attach_attribute(did);
00131
00132 H5Tclose(tid);
00133 H5Sclose(sid);
00134 H5Dclose(did);
00135
00136 return 0;
00137 }
00138
00139 int main()
00140 {
00141 hid_t fid, gid;
00142
00143 fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
00144
00145 gid = H5Gcreate(fid, GRP_NAME, 0);
00146
00147 create_ds_int(fid);
00148 create_ds_float(fid);
00149 create_ds_comp(fid);
00150
00151 create_ds_int(gid);
00152 create_ds_float(gid);
00153 create_ds_comp(gid);
00154
00155 H5Gclose(gid);
00156 H5Fclose(fid);
00157 return 0;
00158 }
00159
00160