added: HDF5File::list

lists a given HDF5 group
This commit is contained in:
Arne Morten Kvarving
2023-02-07 14:31:40 +01:00
parent afba3f948c
commit e5c2fcfaf2
3 changed files with 57 additions and 2 deletions

View File

@@ -109,7 +109,7 @@ void HDF5File::write(const std::string& group,
void HDF5File::read(const std::string& group,
const std::string& dset,
std::vector<char>& buffer)
std::vector<char>& buffer) const
{
hid_t dataset_id = H5Dopen2(m_file, (group + "/"+ dset).c_str(), H5P_DEFAULT);
if (dataset_id == H5I_INVALID_HID) {
@@ -123,4 +123,25 @@ void HDF5File::read(const std::string& group,
H5Dclose(dataset_id);
}
std::vector<std::string> HDF5File::list(const std::string& group) const
{
// Lambda function pushing the group entries to a vector
auto&& list_group = [] (hid_t, const char* name, const H5L_info_t*, void* data) -> herr_t
{
auto& list = *static_cast<std::vector<std::string>*>(data);
list.push_back(name);
return 0;
};
hsize_t idx = 0;
std::vector<std::string> result;
if (H5Literate_by_name(m_file, group.c_str(),
H5_INDEX_NAME, H5_ITER_INC,
&idx, list_group, &result, H5P_DEFAULT) < 0) {
throw std::runtime_error("Failure while listing HDF5 group '" + group + "'");
}
return result;
}
}

View File

@@ -62,7 +62,11 @@ public:
//! \details Throws exception on failure
void read(const std::string& group,
const std::string& dset,
std::vector<char>& buffer);
std::vector<char>& buffer) const;
//! \brief Lists the entries in a given group.
//! \details Note: Both datasets and subgroups are returned
std::vector<std::string> list(const std::string& group) const;
private:
hid_t m_file = H5I_INVALID_HID; //!< File handle