Add group_names function in HDF5 interface

This commit is contained in:
Paul Romano 2018-07-11 07:01:32 -05:00
parent b0239d8cec
commit 7ded07f9cf
2 changed files with 31 additions and 0 deletions

View file

@ -314,6 +314,36 @@ get_groups(hid_t group_id, char* name[])
}
}
std::vector<std::string>
group_names(hid_t group_id)
{
// Determine number of links in the group
H5G_info_t info;
H5Gget_info(group_id, &info);
// Iterate over links to get names
H5O_info_t oinfo;
size_t size;
std::vector<std::string> names;
for (hsize_t i = 0; i < info.nlinks; ++i) {
// Determine type of object (and skip non-group)
H5Oget_info_by_idx(group_id, ".", H5_INDEX_NAME, H5_ITER_INC, i, &oinfo,
H5P_DEFAULT);
if (oinfo.type != H5O_TYPE_GROUP) continue;
// Get size of name
size = 1 + H5Lget_name_by_idx(group_id, ".", H5_INDEX_NAME, H5_ITER_INC,
i, nullptr, 0, H5P_DEFAULT);
// Read name
char buffer[size];
H5Lget_name_by_idx(group_id, ".", H5_INDEX_NAME, H5_ITER_INC, i,
buffer, size, H5P_DEFAULT);
names.emplace_back(&buffer[0], size);
}
return names;
}
bool
object_exists(hid_t object_id, const char* name)

View file

@ -75,6 +75,7 @@ read_nd_vector(hid_t obj_id, const char* name,
std::vector<hsize_t> attribute_shape(hid_t obj_id, const char* name);
std::vector<hsize_t> object_shape(hid_t obj_id);
std::vector<std::string> group_names(hid_t group_id);
//==============================================================================
// Fortran compatibility functions