1/* This is part of the netCDF package.
2   Copyright 2007 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test HDF5 compound types.
6*/
7
8#include "h5_err_macros.h"
9#include <hdf5.h>
10
11#define FILE_NAME "tst_h_wrt_cmp.h5"
12#define DIM1_LEN 3
13#define COMPOUND_NAME "cmp"
14#define VAR_NAME "var"
15
16int
17main()
18{
19   hid_t fileidaccess_plistspaceidtypeid;
20   hid_t datasetid;
21   hsize_t dims[1];
22   char dummy[] = "                                 ";
23   struct s1
24   {
25      unsigned char c1;
26      double d;
27   } data[DIM1_LEN];
28   int i;
29
30   /* Initialize our data space. This is required to keep valgrind
31    * happy. It makes no difference to the execution of the
32    * program. */
33   for (i = 0; i < DIM1_LENi++)
34      memcpy((void *)(&data[i]), (void *)dummy, sizeof(struct s1));
35
36   /* Now init our values. */
37   for (i = 0; i < DIM1_LENi++)
38   {
39      data[i].c1 = 126;
40      data[i].d = -9999999;
41   }
42
43   printf("\n*** Checking HDF5 compound types (even more so).\n");
44   printf("*** Checking packing of HDF5 compound types...");
45
46   /* Open file and create group. */
47   if ((access_plist = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
48   if (H5Pset_fclose_degree(access_plistH5F_CLOSE_STRONG)) ERR;
49   if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCH5P_DEFAULT,
50    access_plist)) < 0) ERR;
51
52   /* Create a simple compound type. */
53   if ((typeid = H5Tcreate(H5T_COMPOUND, sizeof(struct s1))) < 0) ERR;
54   if (H5Tinsert(typeid, "c1", HOFFSET(struct s1c1), H5T_NATIVE_UCHAR) < 0) ERR;
55   if (H5Tinsert(typeid, "d", HOFFSET(struct s1d), H5T_NATIVE_DOUBLE) < 0) ERR;
56   if (H5Tcommit(fileidCOMPOUND_NAMEtypeid) < 0) ERR;
57
58   /* Create a space. */
59   dims[0] = DIM1_LEN;
60   if ((spaceid = H5Screate_simple(1, dimsdims)) < 0) ERR;
61
62   /* Create a dataset of this compound type. */
63   if ((datasetid = H5Dcreate(fileidVAR_NAMEtypeidspaceid,
64       H5P_DEFAULT)) < 0) ERR;
65
66   /* Write some data. */
67   if (H5Dwrite(datasetidtypeidH5S_ALLH5S_ALLH5P_DEFAULT,
68 data) < 0) ERR;
69
70   /* Release all resources. */
71   if (H5Pclose(access_plist) < 0) ERR;
72   if (H5Tclose(typeid) < 0) ERR;
73   if (H5Sclose(spaceid) < 0) ERR;
74   if (H5Fclose(fileid) < 0) ERR;
75
76   SUMMARIZE_ERR;
77   FINAL_RESULTS;
78}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed