mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
added: HDF5File::list
lists a given HDF5 group
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user