1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Check out HDF5 groups.
6*/
7
8#include "h5_err_macros.h"
9#include <hdf5.h>
10
11#define FILE_NAME "tst_h_grps.h5"
12#define GRP_NAME "Bubba-Joe"
13#define SUB_GRP_NAME "Billy-Bob"
14#define DATASET_NAME "Sally-Sue"
15#define NEW_NAME "Mary-Lou"
16
17/* NFC normalized UTF-8 for Unicode 8-character "Hello" in Greek */
18unsigned char norm_utf8[] = {
19   0xCE, 0x9A,   /* GREEK CAPITAL LETTER KAPPA  : 2-bytes utf8 */
20   0xCE, 0xB1,   /* GREEK SMALL LETTER LAMBDA   : 2-bytes utf8 */
21   0xCE, 0xBB,   /* GREEK SMALL LETTER ALPHA    : 2-bytes utf8 */
22   0xCE, 0xB7,   /* GREEK SMALL LETTER ETA      : 2-bytes utf8 */
23   0xCE, 0xBC,   /* GREEK SMALL LETTER MU       : 2-bytes utf8 */
24   0xCE, 0xAD,    /* GREEK SMALL LETTER EPSILON WITH TONOS
25      : 2-bytes utf8 */
26   0xCF, 0x81,   /* GREEK SMALL LETTER RHO      : 2-bytes utf8 */
27   0xCE, 0xB1,   /* GREEK SMALL LETTER ALPHA    : 2-bytes utf8 */
28   0x00
29};
30
31int
32main()
33{
34   printf("\n*** Checking HDF5 group functions.\n");
35   printf("*** Checking out root group...");
36   {
37      hid_t fileidgrpidaccess_plistid;
38
39      /* Open the root group of a new file. */
40      if ((access_plistid = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
41      if (H5Pset_fclose_degree(access_plistidH5F_CLOSE_SEMI)) ERR;
42      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCH5P_DEFAULT,
43       access_plistid)) < 0) ERR;
44      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
45      if (H5Gclose(grpid) < 0 ||
46   H5Fclose(fileid) < 0) ERR;
47
48      /* Reopen file and root group. */
49      if ((fileid = H5Fopen(FILE_NAMEH5F_ACC_RDWR,
50     access_plistid)) < 0) ERR;
51      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
52      if (H5Gclose(grpid) < 0 ||
53   H5Fclose(fileid) < 0)
54  ERR;
55   }
56
57   SUMMARIZE_ERR;
58   printf("*** Checking out H5Gmove...");
59   {
60
61      hid_t fileidgrpid;
62      hid_t datasetidspaceid;
63
64      /* Create file with one dataset. */
65      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCH5P_DEFAULT,
66       H5P_DEFAULT)) < 0) ERR;
67      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
68      if ((spaceid = H5Screate(H5S_SCALAR)) < 0) ERR;
69      if ((datasetid = H5Dcreate(grpidDATASET_NAMEH5T_NATIVE_INT,
70  spaceidH5P_DEFAULT)) < 0) ERR;
71      if (H5Dclose(datasetid) < 0 ||
72   H5Sclose(spaceid) < 0 ||
73   H5Gclose(grpid) < 0 ||
74   H5Fclose(fileid) < 0) ERR;
75
76      /* Reopen file and check, then rename dataset. */
77      if ((fileid = H5Fopen(FILE_NAMEH5F_ACC_RDWR,
78     H5P_DEFAULT)) < 0) ERR;
79      if ((grpid = H5Gopen(fileid, "/")) < 0) ERR;
80      if ((datasetid = H5Dopen1(grpidDATASET_NAME)) < 0) ERR;
81      if (H5Dclose(datasetid) < 0) ERR;
82      if (H5Gmove(grpidDATASET_NAMENEW_NAME) < 0) ERR;
83      if ((datasetid = H5Dopen1(grpidNEW_NAME)) < 0) ERR;
84      if (H5Dclose(datasetid) < 0 ||
85   H5Gclose(grpid) < 0 ||
86   H5Fclose(fileid) < 0)
87  ERR;
88   }
89
90   SUMMARIZE_ERR;
91   printf("*** Checking out sub-groups...");
92
93   {
94      hid_t fileidgrpidsubgrpid;
95
96      /* Create file with some nested groups. */
97      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCH5P_DEFAULT,
98       H5P_DEFAULT)) < 0) ERR;
99      if ((grpid = H5Gcreate(fileidGRP_NAME, 0)) < 0) ERR;
100      if ((subgrpid = H5Gcreate(grpidSUB_GRP_NAME, 0)) < 0) ERR;
101      if (H5Gclose(subgrpid) < 0 ||
102   H5Gclose(grpid) < 0 ||
103   H5Fclose(fileid) < 0) ERR;
104
105      /* Reopen file and discover groups. */
106      if ((fileid = H5Fopen(FILE_NAMEH5F_ACC_RDONLYH5P_DEFAULT)) < 0) ERR;
107      if ((grpid = H5Gopen(fileidGRP_NAME)) < 0) ERR;
108      if ((subgrpid = H5Gopen(grpidSUB_GRP_NAME)) < 0) ERR;
109      if (H5Gclose(subgrpid) < 0 ||
110   H5Gclose(grpid) < 0 ||
111   H5Fclose(fileid) < 0) ERR;
112   }
113
114   SUMMARIZE_ERR;
115   printf("*** Checking out UTF8 named sub-group...");
116
117   {
118      hid_t fileidgrpidsubgrpid;
119
120      /* Create file with nested group. */
121      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCH5P_DEFAULT,
122       H5P_DEFAULT)) < 0) ERR;
123      if ((grpid = H5Gcreate(fileid, (char *)norm_utf8, 0)) < 0) ERR;
124      if ((subgrpid = H5Gcreate(grpidSUB_GRP_NAME, 0)) < 0) ERR;
125      if (H5Gclose(subgrpid) < 0 ||
126   H5Gclose(grpid) < 0 ||
127   H5Fclose(fileid) < 0) ERR;
128
129      /* Reopen file and discover groups. */
130      if ((fileid = H5Fopen(FILE_NAMEH5F_ACC_RDONLYH5P_DEFAULT)) < 0) ERR;
131      if ((grpid = H5Gopen(fileid, (char *)norm_utf8)) < 0) ERR;
132      if ((subgrpid = H5Gopen(grpidSUB_GRP_NAME)) < 0) ERR;
133      if (H5Gclose(subgrpid) < 0 ||
134   H5Gclose(grpid) < 0 ||
135   H5Fclose(fileid) < 0) ERR;
136   }
137
138   SUMMARIZE_ERR;
139   printf("*** Checking out UTF8 named sub-group with group creation ordering...");
140
141   {
142      hid_t fileidgrpidsubgrpid;
143      hid_t fapl_idfcpl_idgcpl_id;
144
145      /* Create file with nested group. */
146      if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
147      if (H5Pset_libver_bounds(fapl_idH5F_LIBVER_LATESTH5F_LIBVER_LATEST) < 0) ERR;
148      if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR;
149      if (H5Pset_link_creation_order(fcpl_idH5P_CRT_ORDER_TRACKED|H5P_CRT_ORDER_INDEXED) < 0) ERR;
150      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCfcpl_idfapl_id)) < 0) ERR;
151
152      if ((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0) ERR;
153      if (H5Pset_link_creation_order(gcpl_idH5P_CRT_ORDER_TRACKED|H5P_CRT_ORDER_INDEXED) < 0) ERR;
154      if ((grpid = H5Gcreate_anon(fileidgcpl_idH5P_DEFAULT)) < 0) ERR;
155      if ((H5Olink(grpidfileid, (char *)norm_utf8H5P_DEFAULTH5P_DEFAULT)) < 0) ERR;
156
157      if ((subgrpid = H5Gcreate(grpidSUB_GRP_NAME, 0)) < 0) ERR;
158      if (H5Gclose(subgrpid) < 0 ||
159   H5Gclose(grpid) < 0 ||
160   H5Fclose(fileid) < 0) ERR;
161
162      /* Reopen file and discover groups. */
163      if ((fileid = H5Fopen(FILE_NAMEH5F_ACC_RDONLYH5P_DEFAULT)) < 0) ERR;
164      if ((grpid = H5Gopen(fileid, (char *)norm_utf8)) < 0) ERR;
165      if ((subgrpid = H5Gopen(grpidSUB_GRP_NAME)) < 0) ERR;
166      if (H5Gclose(subgrpid) < 0 ||
167   H5Gclose(grpid) < 0 ||
168   H5Fclose(fileid) < 0) ERR;
169   }
170
171   SUMMARIZE_ERR;
172
173   FINAL_RESULTS;
174}
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190


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