diff --git a/include/h5pp/details/h5ppHdf5.h b/include/h5pp/details/h5ppHdf5.h index 4cbbcd3d..aad55a4d 100644 --- a/include/h5pp/details/h5ppHdf5.h +++ b/include/h5pp/details/h5ppHdf5.h @@ -304,6 +304,7 @@ namespace h5pp::hdf5 { info.memberSizes = std::vector(nmemb); info.memberIndex = std::vector(nmemb); info.memberOffset = std::vector(nmemb); + info.memberClass = std::vector(nmemb); if(info.h5Class.value() == H5T_COMPOUND) { for(size_t idx = 0; idx < nmemb; idx++) { char *name = H5Tget_member_name(h5Type, type::safe_cast(idx)); @@ -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(idx)); + info.memberClass->operator[](idx) = H5Tget_member_class(h5Type, type::safe_cast(idx)); H5free_memory(name); } } diff --git a/include/h5pp/details/h5ppInfo.h b/include/h5pp/details/h5ppInfo.h index 4c7bae45..26105ac4 100644 --- a/include/h5pp/details/h5ppInfo.h +++ b/include/h5pp/details/h5ppInfo.h @@ -838,6 +838,7 @@ namespace h5pp { std::optional> memberSizes = std::nullopt; std::optional> memberOffset = std::nullopt; std::optional> memberIndex = std::nullopt; + std::optional> memberClass = std::nullopt; [[nodiscard]] std::string string(bool enable = true) const { if(not enable) return {}; std::string msg; @@ -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(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(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 */ }