diff options
Diffstat (limited to 'tools/h5dump/h5dumpgentest.c')
-rw-r--r-- | tools/h5dump/h5dumpgentest.c | 201 |
1 files changed, 199 insertions, 2 deletions
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c index b2715a1..b2edb8d 100644 --- a/tools/h5dump/h5dumpgentest.c +++ b/tools/h5dump/h5dumpgentest.c @@ -66,6 +66,7 @@ #define FILE38 "tvlstr.h5" #define FILE39 "tchar.h5" #define FILE40 "tattr2.h5" +#define FILE41 "tcompound_complex.h5" /* prototypes */ @@ -123,6 +124,20 @@ typedef struct s1_t { /* VL string datatype name */ #define VLSTR_TYPE "vl_string_type" +/* "File 41" macros */ +/* Name of dataset to create in datafile */ +#define F41_DATASETNAME "CompoundComplex" +/* Dataset dimensions */ +#define F41_LENGTH 6 +#define F41_RANK 1 +#define F41_ARRAY_RANK 1 +#define F41_ARRAY_RANKd 2 +#define F41_DIMb 4 +#define F41_ARRAY_DIMc 6 +#define F41_ARRAY_DIMd1 5 +#define F41_ARRAY_DIMd2 6 +#define F41_ARRAY_DIMf 10 + static void gent_group(void) { hid_t fid, group; @@ -3852,8 +3867,8 @@ static void write_dset_in(hid_t loc_id, static void gent_attr_all(void) { - hid_t file_id; - hid_t dset_id; + hid_t file_id; + hid_t dset_id; hid_t group_id; hid_t group2_id; hid_t root_id; @@ -3984,6 +3999,186 @@ int write_dset( hid_t loc_id, int rank, hsize_t *dims, const char *dset_name, } +static void gent_compound_complex(void) +{ + /* Structure and array for compound types */ + typedef struct Array1Struct { + int a; + const char *b[F41_DIMb]; + char c[F41_ARRAY_DIMc]; + short d[F41_ARRAY_DIMd1][F41_ARRAY_DIMd2]; + float e; + double f[F41_ARRAY_DIMf]; + char g; + } Array1Struct; + Array1Struct Array1[F41_LENGTH]; + + /* Define the value of the string array */ + const char *quote [F41_DIMb] = { + "A fight is a contract that takes two people to honor.", + "A combative stance means that you've accepted the contract.", + "In which case, you deserve what you get.", + " -- Professor Cheng Man-ch'ing" + }; + + /* Define the value of the character array */ + char chararray [F41_ARRAY_DIMc] = {'H', 'e', 'l', 'l', 'o', '!'}; + + + hid_t Array1Structid; /* File datatype identifier */ + hid_t array_tid; /* Array datatype handle */ + hid_t array1_tid; /* Array datatype handle */ + hid_t array2_tid; /* Array datatype handle */ + hid_t array4_tid; /* Array datatype handle */ + hid_t datafile, dataset; /* Datafile/dataset handles */ + hid_t dataspace; /* Dataspace handle */ + herr_t status; /* Error checking variable */ + hsize_t dim[] = {F41_LENGTH}; /* Dataspace dimensions */ + hsize_t array_dimb[] = {F41_DIMb}; /* Array dimensions */ + hsize_t array_dimd[]={F41_ARRAY_DIMd1,F41_ARRAY_DIMd2}; /* Array dimensions */ + hsize_t array_dimf[]={F41_ARRAY_DIMf}; /* Array dimensions */ + hid_t str_array_id; + + int m, n, o; /* Array init loop vars */ + + /* Initialize the data in the arrays/datastructure */ + for (m = 0; m< F41_LENGTH; m++) { + Array1[m].a = m; + + for (n = 0; n < F41_DIMb; n++) { + Array1[m].b[n] = quote[n]; + } + + for (n = 0; n < F41_ARRAY_DIMc; n++) { + Array1[m].c[n] = chararray[n]; + } + + for (n = 0; n < F41_ARRAY_DIMd1; n++) { + for (o = 0; o < F41_ARRAY_DIMd2; o++){ + Array1[m].d[n][o] = m + n + o; + } + } + + Array1[m].e = ( m * .96 ); + + for (n = 0; n < F41_ARRAY_DIMf; n++) { + Array1[m].f[n] = ( m * 1024.9637 ); + } + + Array1[m].g = 'm'; + } + + /* Create the dataspace */ + dataspace = H5Screate_simple(F41_RANK, dim, NULL); + assert (dataspace >= 0); + + /* Create the file */ + datafile = H5Fcreate(FILE41, H5F_ACC_TRUNC, H5P_DEFAULT, + H5P_DEFAULT); + assert (datafile >= 0); + + /* Copy the array data type for the string array */ + array_tid = H5Tcopy (H5T_C_S1); + assert (array_tid >= 0); + + /* Set the string array size to Variable */ + status = H5Tset_size (array_tid,H5T_VARIABLE); + assert (status >= 0); + + /* Create the array data type for the string array */ + str_array_id = H5Tarray_create(array_tid, F41_ARRAY_RANK, + array_dimb, NULL); + assert (str_array_id >= 0); + + /* Copy the array data type for the character array */ + array1_tid = H5Tcopy (H5T_C_S1); + assert (array1_tid >= 0); + + /* Set the character array size */ + status = H5Tset_size (array1_tid, F41_ARRAY_DIMc); + assert (status >= 0); + + /* Create the array data type for the character array */ + array2_tid = H5Tarray_create(H5T_NATIVE_SHORT, F41_ARRAY_RANKd, + array_dimd, NULL); + assert (array2_tid >= 0); + + /* Create the array data type for the character array */ + array4_tid = H5Tarray_create(H5T_NATIVE_DOUBLE, F41_ARRAY_RANK, + array_dimf, NULL); + assert (array4_tid >= 0); + + /* Create the memory data type */ + Array1Structid = H5Tcreate (H5T_COMPOUND, sizeof(Array1Struct)); + assert (Array1Structid >= 0); + + /* Insert the arrays and variables into the structure */ + status = H5Tinsert(Array1Structid, "a_name", + HOFFSET(Array1Struct, a), H5T_NATIVE_INT); + assert (status >= 0); + + status = H5Tinsert(Array1Structid, "b_name", + HOFFSET(Array1Struct, b), str_array_id); + assert (status >= 0); + + status = H5Tinsert(Array1Structid, "c_name", + HOFFSET(Array1Struct, c), array1_tid); + assert (status >= 0); + + status = H5Tinsert(Array1Structid, "d_name", + HOFFSET(Array1Struct, d), array2_tid); + assert (status >= 0); + + status = H5Tinsert(Array1Structid, "e_name", + HOFFSET(Array1Struct, e), H5T_NATIVE_FLOAT); + assert (status >= 0); + + status = H5Tinsert(Array1Structid, "f_name", + HOFFSET(Array1Struct, f), array4_tid); + assert (status >= 0); + + status = H5Tinsert(Array1Structid, "g_name", + HOFFSET(Array1Struct, g), H5T_NATIVE_CHAR); + assert (status >= 0); + + /* Create the dataset */ + dataset = H5Dcreate(datafile, F41_DATASETNAME, Array1Structid, + dataspace, H5P_DEFAULT); + + /* Write data to the dataset */ + status = H5Dwrite(dataset, Array1Structid, H5S_ALL, H5S_ALL, + H5P_DEFAULT, Array1); + assert (status >= 0); + + /* Release resources */ + status = H5Tclose(Array1Structid); + assert (status >= 0); + + status = H5Tclose(array_tid); + assert (status >= 0); + + status = H5Tclose(array1_tid); + assert (status >= 0); + + status = H5Tclose(array2_tid); + assert (status >= 0); + + status = H5Tclose(array4_tid); + assert (status >= 0); + + status = H5Tclose(str_array_id); + assert (status >= 0); + + status = H5Sclose(dataspace); + assert (status >= 0); + + status = H5Dclose(dataset); + assert (status >= 0); + + status = H5Fclose(datafile); + assert (status >= 0); +} + /*------------------------------------------------------------------------- * Function: main @@ -4047,5 +4242,7 @@ int main(void) gent_attr_all(); + gent_compound_complex(); + return 0; } |