diff options
author | Allen Byrne <50328838+byrnHDF@users.noreply.github.com> | 2024-01-03 17:23:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-03 17:23:42 (GMT) |
commit | 72e33ad7727765fd162a1f70ca502cc2437aabde (patch) | |
tree | 84b4cff56687fa7a8d443a529984932dd30a7fa4 /HDF5Examples/C/H5G/h5ex_g_phase.c | |
parent | 95827bc79d592ad5aa71ec3199a83ede9b324c20 (diff) | |
download | hdf5-72e33ad7727765fd162a1f70ca502cc2437aabde.zip hdf5-72e33ad7727765fd162a1f70ca502cc2437aabde.tar.gz hdf5-72e33ad7727765fd162a1f70ca502cc2437aabde.tar.bz2 |
Merge examples and workflows from develop (#3918)
Diffstat (limited to 'HDF5Examples/C/H5G/h5ex_g_phase.c')
-rw-r--r-- | HDF5Examples/C/H5G/h5ex_g_phase.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/HDF5Examples/C/H5G/h5ex_g_phase.c b/HDF5Examples/C/H5G/h5ex_g_phase.c new file mode 100644 index 0000000..b87c0a4 --- /dev/null +++ b/HDF5Examples/C/H5G/h5ex_g_phase.c @@ -0,0 +1,128 @@ +/************************************************************ + + This example shows how to set the conditions for + conversion between compact and dense (indexed) groups. + + This file is intended for use with HDF5 Library version 1.8 + + ************************************************************/ + +#include "hdf5.h" +#include <stdio.h> + +#define FILE "h5ex_g_phase.h5" +#define MAX_GROUPS 7 +#define MAX_COMPACT 5 +#define MIN_DENSE 3 + +int +main(void) +{ + hid_t file, group, subgroup, fapl, gcpl; /* Handles */ + herr_t status; + H5G_info_t ginfo; + char name[3] = "G0"; /* Name of subgroup */ + unsigned i; + + /* + * Set file access property list to allow the latest file format. + * This will allow the library to create new format groups. + */ + fapl = H5Pcreate(H5P_FILE_ACCESS); + status = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST); + + /* + * Create group access property list and set the phase change + * conditions. In this example we lowered the conversion threshold + * to simplify the output, though this may not be optimal. + */ + gcpl = H5Pcreate(H5P_GROUP_CREATE); + status = H5Pset_link_phase_change(gcpl, MAX_COMPACT, MIN_DENSE); + + /* + * Create a new file using the default properties. + */ + file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); + + /* + * Create primary group. + */ + group = H5Gcreate(file, name, H5P_DEFAULT, gcpl, H5P_DEFAULT); + + /* + * Add subgroups to "group" one at a time, print the storage type + * for "group" after each subgroup is created. + */ + for (i = 1; i <= MAX_GROUPS; i++) { + + /* + * Define the subgroup name and create the subgroup. + */ + name[1] = ((char)i) + '0'; /* G1, G2, G3 etc. */ + subgroup = H5Gcreate(group, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + status = H5Gclose(subgroup); + + /* + * Obtain the group info and print the group storage type + */ + status = H5Gget_info(group, &ginfo); + printf("%d Group%s: Storage type is ", (int)ginfo.nlinks, ginfo.nlinks == 1 ? " " : "s"); + switch (ginfo.storage_type) { + case H5G_STORAGE_TYPE_COMPACT: + printf("H5G_STORAGE_TYPE_COMPACT\n"); /* New compact format */ + break; + case H5G_STORAGE_TYPE_DENSE: + printf("H5G_STORAGE_TYPE_DENSE\n"); /* New dense (indexed) format */ + break; + case H5G_STORAGE_TYPE_SYMBOL_TABLE: + printf("H5G_STORAGE_TYPE_SYMBOL_TABLE\n"); /* Original format */ + break; + case H5G_STORAGE_TYPE_UNKNOWN: + printf("H5G_STORAGE_TYPE_UNKNOWN\n"); /* Unknown format */ + } + } + + printf("\n"); + + /* + * Delete subgroups one at a time, print the storage type for + * "group" after each subgroup is deleted. + */ + for (i = MAX_GROUPS; i >= 1; i--) { + + /* + * Define the subgroup name and delete the subgroup. + */ + name[1] = ((char)i) + '0'; /* G1, G2, G3 etc. */ + status = H5Ldelete(group, name, H5P_DEFAULT); + + /* + * Obtain the group info and print the group storage type + */ + status = H5Gget_info(group, &ginfo); + printf("%d Group%s: Storage type is ", (int)ginfo.nlinks, ginfo.nlinks == 1 ? " " : "s"); + switch (ginfo.storage_type) { + case H5G_STORAGE_TYPE_COMPACT: + printf("H5G_STORAGE_TYPE_COMPACT\n"); /* New compact format */ + break; + case H5G_STORAGE_TYPE_DENSE: + printf("H5G_STORAGE_TYPE_DENSE\n"); /* New dense (indexed) format */ + break; + case H5G_STORAGE_TYPE_SYMBOL_TABLE: + printf("H5G_STORAGE_TYPE_SYMBOL_TABLE\n"); /* Original format */ + break; + case H5G_STORAGE_TYPE_UNKNOWN: + printf("H5G_STORAGE_TYPE_UNKNOWN\n"); /* Unknown format */ + } + } + + /* + * Close and release resources. + */ + status = H5Pclose(fapl); + status = H5Pclose(gcpl); + status = H5Gclose(group); + status = H5Fclose(file); + + return 0; +} |