diff options
Diffstat (limited to 'HDF5Examples/C/H5G/h5ex_g_visit.c')
-rw-r--r-- | HDF5Examples/C/H5G/h5ex_g_visit.c | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/HDF5Examples/C/H5G/h5ex_g_visit.c b/HDF5Examples/C/H5G/h5ex_g_visit.c new file mode 100644 index 0000000..6f64520 --- /dev/null +++ b/HDF5Examples/C/H5G/h5ex_g_visit.c @@ -0,0 +1,121 @@ +/************************************************************ + + This example shows how to recursively traverse a file + using H5Ovisit and H5Lvisit. The program prints all of + the objects in the file specified in FILE, then prints all + of the links in that file. The default file used by this + example implements the structure described in the User's + Guide, chapter 4, figure 26. + + ************************************************************/ + +#include "hdf5.h" +#include <stdio.h> + +#define FILE "h5ex_g_visit.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); + +/* + * Operator function to be called by H5Lvisit. + */ +herr_t op_func_L(hid_t loc_id, const char *name, const H5L_info_t *info, void *operator_data); + +int +main(void) +{ + hid_t file = H5I_INVALID_HID; + herr_t status; + + /* + * Open file + */ + file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT); + + /* + * Begin iteration using 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 + + /* + * Repeat the same process using H5Lvisit + */ + printf("\nLinks in the file:\n"); + status = H5Lvisit(file, H5_INDEX_NAME, H5_ITER_NATIVE, op_func_L, NULL); + + /* + * Close and release resources. + */ + 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; +} + +/************************************************************ + + Operator function for H5Lvisit. This function simply + retrieves the info for the object the current link points + to, and calls the operator function for H5Ovisit. + + ************************************************************/ +herr_t +op_func_L(hid_t loc_id, const char *name, const H5L_info_t *info, void *operator_data) +{ + herr_t status; + H5O_info_t infobuf; + + /* + * Get type of the object and display its name and type. + * The name of the object is passed to this function by + * the Library. + */ +#if H5_VERSION_GE(1, 12, 0) && !defined(H5_USE_110_API) && !defined(H5_USE_18_API) && !defined(H5_USE_16_API) + status = H5Oget_info_by_name(loc_id, name, &infobuf, H5O_INFO_ALL, H5P_DEFAULT); +#else + status = H5Oget_info_by_name(loc_id, name, &infobuf, H5P_DEFAULT); +#endif + return op_func(loc_id, name, &infobuf, operator_data); +} |