diff options
Diffstat (limited to 'HDF5Examples/C/H5G/h5ex_g_intermediate.c')
-rw-r--r-- | HDF5Examples/C/H5G/h5ex_g_intermediate.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/HDF5Examples/C/H5G/h5ex_g_intermediate.c b/HDF5Examples/C/H5G/h5ex_g_intermediate.c new file mode 100644 index 0000000..55c8c64 --- /dev/null +++ b/HDF5Examples/C/H5G/h5ex_g_intermediate.c @@ -0,0 +1,99 @@ +/************************************************************ + + This example shows how to create intermediate groups with + a single call to H5Gcreate. + + ************************************************************/ + +#include "hdf5.h" + +#define FILE "h5ex_g_intermediate.h5" + +/* + * Operator function to be called by H5Ovisit. + */ +herr_t op_func(hid_t loc_id, const char *name, const H5O_info_t *info, void *operator_data); + +int +main(void) +{ + hid_t file = H5I_INVALID_HID; + hid_t group = H5I_INVALID_HID; + hid_t gcpl = H5I_INVALID_HID; + herr_t status; + + /* + * Create a new file using the default properties. + */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Create group creation property list and set it to allow creation + * of intermediate groups. + */ + gcpl = H5Pcreate(H5P_LINK_CREATE); + status = H5Pset_create_intermediate_group(gcpl, 1); + + /* + * Create the group /G1/G2/G3. Note that /G1 and /G1/G2 do not + * exist yet. This call would cause an error if we did not use the + * previously created property list. + */ + group = H5Gcreate(file, "/G1/G2/G3", gcpl, H5P_DEFAULT, H5P_DEFAULT); + + /* + * Print all the objects in the files to show that intermediate + * groups have been created. See h5ex_g_visit for more information + * on how to use H5Ovisit. + */ + printf("Objects in the file:\n"); +#if H5_VERSION_GE(1, 12, 0) && !defined(H5_USE_110_API) && !defined(H5_USE_18_API) && !defined(H5_USE_16_API) + status = H5Ovisit(file, H5_INDEX_NAME, H5_ITER_NATIVE, op_func, NULL, H5O_INFO_ALL); +#else + status = H5Ovisit(file, H5_INDEX_NAME, H5_ITER_NATIVE, op_func, NULL); +#endif + + /* + * Close and release resources. + */ + status = H5Pclose(gcpl); + status = H5Gclose(group); + status = H5Fclose(file); + + return 0; +} + +/************************************************************ + + Operator function for H5Ovisit. This function prints the + name and type of the object passed to it. + + ************************************************************/ +herr_t +op_func(hid_t loc_id, const char *name, const H5O_info_t *info, void *operator_data) +{ + printf("/"); /* Print root group in object path */ + + /* + * Check if the current object is the root group, and if not print + * the full path name and type. + */ + if (name[0] == '.') /* Root group, do not print '.' */ + printf(" (Group)\n"); + else + switch (info->type) { + case H5O_TYPE_GROUP: + printf("%s (Group)\n", name); + break; + case H5O_TYPE_DATASET: + printf("%s (Dataset)\n", name); + break; + case H5O_TYPE_NAMED_DATATYPE: + printf("%s (Datatype)\n", name); + break; + default: + printf("%s (Unknown)\n", name); + } + + return 0; +} |