/* cenumapp.c */ #include "hdf5.h" #define FILE "cenuma.h5" #define DATASETNAME "Compound Array" #define LENGTH 5 #define PARTS 5 #define RANK 2 #define ARRAY_SIZE 3 #define ARRAY_RANK 1 #define LOOPNUM 2 typedef enum { CLEAR, RED, GREEN, BLUE, WHITE, BLACK } ColorEnum; typedef struct sa_t { int d[ARRAY_SIZE]; ColorEnum d1; } data_t; data_t datastuff[LENGTH][PARTS]; int main(void) { int i, j, k; hsize_t offset[2]={0, 0}; hsize_t newsize [2] = {0, 0}; hsize_t offset_slab[2] = {LENGTH, PARTS}; hsize_t count[2]= {LENGTH, PARTS}; hsize_t dim[2] = {LENGTH, PARTS}; hsize_t maxdim[2] = {H5S_UNLIMITED, PARTS}; hsize_t chkdim[2] = {LENGTH, PARTS}; hid_t file, dataset, memspace, space, datatype, dataspace; hid_t cparms; hid_t d_dtype, ColorEnumId; hid_t dtype_memory; herr_t status; ColorEnum val; hsize_t array_dim[] = {ARRAY_SIZE}; /* * Initialize the data */ for (k = 0; k< LENGTH; k++) for (i = 0; i< PARTS; i++) { for (j = 0; j < ARRAY_SIZE; j++) datastuff[k][i].d[j] = 7; datastuff[k][i].d1 = i; } space = H5Screate_simple(RANK, dim, maxdim); file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); ColorEnumId = H5Tcreate (H5T_ENUM, sizeof (ColorEnum)); val = CLEAR; status = H5Tenum_insert (ColorEnumId, "CLEAR", (int *)&val); val = RED; status = H5Tenum_insert (ColorEnumId, "RED", (int *)&val); val = GREEN; status = H5Tenum_insert (ColorEnumId, "GREEN", (int *)&val); val = BLUE; status = H5Tenum_insert (ColorEnumId, "BLUE", (int *)&val); val = WHITE; status = H5Tenum_insert (ColorEnumId, "WHITE", (int *)&val); val = BLACK; status = H5Tenum_insert (ColorEnumId, "BLACK", (int *)&val); d_dtype = H5Tarray_create(H5T_NATIVE_INT, ARRAY_RANK, array_dim); cparms = H5Pcreate (H5P_DATASET_CREATE); status = H5Pset_chunk (cparms, RANK, chkdim); dtype_memory = H5Tcreate (H5T_COMPOUND, sizeof(data_t)); status = H5Tinsert(dtype_memory, "d_name", HOFFSET(data_t, d), d_dtype); status = H5Tinsert(dtype_memory, "enum_d1", HOFFSET(data_t, d1), ColorEnumId); dataset = H5Dcreate(file, DATASETNAME, dtype_memory, space, H5P_DEFAULT, cparms, H5P_DEFAULT); memspace = H5Screate_simple (2, offset_slab, NULL); for (i=0; i