Add read_attribute overload for vector<string> and dataset_names

This commit is contained in:
Paul Romano 2018-08-13 16:11:48 -05:00
parent 886017ebb0
commit 1d872dcaa3
2 changed files with 33 additions and 2 deletions

View file

@ -327,7 +327,7 @@ get_groups(hid_t group_id, char* name[])
}
std::vector<std::string>
group_names(hid_t group_id)
member_names(hid_t group_id, H5O_type_t type)
{
// Determine number of links in the group
H5G_info_t info;
@ -341,7 +341,7 @@ group_names(hid_t group_id)
// 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;
if (oinfo.type != type) continue;
// Get size of name
size = 1 + H5Lget_name_by_idx(group_id, ".", H5_INDEX_NAME, H5_ITER_INC,
@ -356,6 +356,17 @@ group_names(hid_t group_id)
return names;
}
std::vector<std::string>
group_names(hid_t group_id)
{
return member_names(group_id, H5O_TYPE_GROUP);
}
std::vector<std::string>
dataset_names(hid_t group_id)
{
return member_names(group_id, H5O_TYPE_DATASET);
}
bool
object_exists(hid_t object_id, const char* name)

View file

@ -74,6 +74,7 @@ read_nd_vector(hid_t obj_id, const char* name,
bool must_have = false);
std::vector<hsize_t> attribute_shape(hid_t obj_id, const char* name);
std::vector<std::string> dataset_names(hid_t group_id);
void ensure_exists(hid_t group_id, const char* name);
std::vector<std::string> group_names(hid_t group_id);
std::vector<hsize_t> object_shape(hid_t obj_id);
@ -209,6 +210,25 @@ read_attribute(hid_t obj_id, const char* name, std::string& str)
str = std::string{buffer, n};
}
// overload for std::vector<std::string>
inline void
read_attribute(hid_t obj_id, const char* name, std::vector<std::string>& vec)
{
auto dims = attribute_shape(obj_id, name);
auto m = dims[0];
// Allocate a C char array to get strings
auto n = attribute_typesize(obj_id, name);
char buffer[m][n+1];
// Read char data in attribute
read_attr_string(obj_id, name, n, buffer[0]);
for (int i = 0; i < m; ++i) {
vec.emplace_back(&buffer[i][0]);
}
}
//==============================================================================
// Templates/overloads for read_dataset
//==============================================================================