Skip to content

Commit

Permalink
H5TInfo: added memberClass field listing the hdf5 classes of a type id
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidAce committed May 13, 2023
1 parent a9e6b26 commit c941dba
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
2 changes: 2 additions & 0 deletions include/h5pp/details/h5ppHdf5.h
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,7 @@ namespace h5pp::hdf5 {
info.memberSizes = std::vector<size_t>(nmemb);
info.memberIndex = std::vector<int>(nmemb);
info.memberOffset = std::vector<size_t>(nmemb);
info.memberClass = std::vector<H5T_class_t>(nmemb);
if(info.h5Class.value() == H5T_COMPOUND) {
for(size_t idx = 0; idx < nmemb; idx++) {
char *name = H5Tget_member_name(h5Type, type::safe_cast<unsigned int>(idx));
Expand All @@ -312,6 +313,7 @@ namespace h5pp::hdf5 {
info.memberSizes->operator[](idx) = H5Tget_size(info.memberTypes->operator[](idx));
info.memberIndex->operator[](idx) = H5Tget_member_index(h5Type, name);
info.memberOffset->operator[](idx) = H5Tget_member_offset(h5Type, type::safe_cast<unsigned int>(idx));
info.memberClass->operator[](idx) = H5Tget_member_class(h5Type, type::safe_cast<unsigned int>(idx));
H5free_memory(name);
}
}
Expand Down
21 changes: 12 additions & 9 deletions include/h5pp/details/h5ppInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -838,6 +838,7 @@ namespace h5pp {
std::optional<std::vector<size_t>> memberSizes = std::nullopt;
std::optional<std::vector<size_t>> memberOffset = std::nullopt;
std::optional<std::vector<int>> memberIndex = std::nullopt;
std::optional<std::vector<H5T_class_t>> memberClass = std::nullopt;
[[nodiscard]] std::string string(bool enable = true) const {
if(not enable) return {};
std::string msg;
Expand All @@ -853,16 +854,18 @@ namespace h5pp {
if(not enable) return {};
std::string msg;
/* clang-format off */
if(numMembers){
msg.append(h5pp::format("Fields ({}):\n", numMembers.value()));
for(size_t m = 0; m < type::safe_cast<size_t>(numMembers.value()); m++){
if(memberIndex and memberIndex->size() > m) msg.append(h5pp::format(" [{:^3}] ", memberIndex->operator[](m)));
if(memberNames and memberNames->size() > m) msg.append(h5pp::format(" {:<32} ", memberNames->operator[](m)));
if(memberTypes and memberTypes->size() > m) msg.append(h5pp::format("| {:<16} ", type::getH5TypeName(memberTypes->operator[](m))));
if(memberSizes and memberSizes->size() > m) msg.append(h5pp::format("| size {:<4} bytes ", memberSizes->operator[](m)));
if(memberOffset and memberOffset->size() > m) msg.append(h5pp::format("| offset {:<4} bytes", memberOffset->operator[](m)));
}
std::string msg = fmt::format("{1:4}: {2:{0}} | {3:6} | {4:6} | {5:16} | {6:24}\n", nwidth, "idx", "name", "size", "offset", "class", "type");
for(size_t m = 0; m < type::safe_cast<size_t>(numMembers.value()); ++m) {
msg += fmt::format("{1:4}: {2:{0}} | {3:6} | {4:6} | {5:16} | {6:24}\n", nwidth,
m,
memberNames and memberNames->size() > m ? memberNames->at(m) : "",
memberSizes and memberSizes->size() > m ? memberSizes->at(m) : -1ul,
memberOffset and memberOffset->size() > m ? memberOffset->at(m) : -1ul,
memberClass and memberClass->size() > m ? h5pp::type::getH5ClassName(memberClass->at(m)) : "",
memberTypes and memberTypes->size() > m ? h5pp::type::getH5TypeName(memberTypes->at(m)) : ""
);
}
/* clang-format on */
return msg;
/* clang-format on */
}
Expand Down

0 comments on commit c941dba

Please sign in to comment.