/* */ #include "hdf5.h" #define FILENAME "cenum.h5" #define DATASETNAME "Compound Array" #define LENGTH 5 #define PARTS 5 #define RANK 2 #define ARRAY_SIZE 3 #define ARRAY_RANK 1 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[] = {1}; 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); printf ("H5Screate_simple returns: %i\n", space); file = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); printf ("H5Fcreate returns: %i\n", file); ColorEnumId = H5Tcreate (H5T_ENUM, sizeof (ColorEnum)); printf ("H5Tcreate returns: %i\n", ColorEnumId); val = CLEAR; status = H5Tenum_insert (ColorEnumId, "CLEAR", (int *)&val); printf ("H5Tenum_insert: %i\n", status); val = RED; status = H5Tenum_insert (ColorEnumId, "RED", (int *)&val); printf ("H5Tenum_insert: %i\n", status); val = GREEN; status = H5Tenum_insert (ColorEnumId, "GREEN", (int *)&val); printf ("H5Tenum_insert: %i\n", status); val = BLUE; status = H5Tenum_insert (ColorEnumId, "BLUE", (int *)&val); printf ("H5Tenum_insert: %i\n", status); val = WHITE; status = H5Tenum_insert (ColorEnumId, "WHITE", (int *)&val); printf ("H5Tenum_insert: %i\n", status); val = BLACK; status = H5Tenum_insert (ColorEnumId, "BLACK", (int *)&val); printf ("H5Tenum_insert: %i\n", status); d_dtype = H5Tarray_create(H5T_NATIVE_INT, ARRAY_RANK, array_dim); printf ("H5Tarray_create returns: %i\n", d_dtype); cparms = H5Pcreate (H5P_DATASET_CREATE); printf ("H5Pcreate returns: %i\n", cparms); status = H5Pset_chunk (cparms, RANK, chkdim); printf ("H5Pset_chunk: %i\n", status); dtype_memory = H5Tcreate (H5T_COMPOUND, sizeof(data_t)); printf ("H5Tcreate returns: %i\n", dtype_memory); status = H5Tinsert(dtype_memory, "d_name", HOFFSET(data_t, d), d_dtype); printf ("H5Tinsert returns: %i\n", status); status = H5Tinsert(dtype_memory, "enum_d1", HOFFSET(data_t, d1), ColorEnumId); printf ("H5Tinsert returns: %i\n", status); dataset = H5Dcreate(file, DATASETNAME, dtype_memory, space, H5P_DEFAULT, cparms, H5P_DEFAULT); printf ("H5Dcreate returns: %i\n", dataset); status = H5Dwrite(dataset, dtype_memory, H5S_ALL, H5S_ALL, H5P_DEFAULT, datastuff); printf ("H5Dwrite returns: %i\n", status); status = H5Pclose (cparms); printf ("H5Pclose returns: %i\n", status); status = H5Tclose (ColorEnumId); printf ("H5Tclose returns: %i\n", status); status = H5Tclose (dtype_memory); printf ("H5Tclose returns: %i\n", status); status = H5Tclose (d_dtype); printf ("H5Tclose returns: %i\n", status); status = H5Sclose(space); printf ("H5Sclose returns: %i\n", status); status = H5Dclose(dataset); printf ("H5Dclose returns: %i\n", status); status = H5Fclose(file); printf ("H5Fclose returns: %i\n", status); return 0; }