diff --git a/include/openPMD/RecordComponent.hpp b/include/openPMD/RecordComponent.hpp index 87b7915407..cb22b6a336 100644 --- a/include/openPMD/RecordComponent.hpp +++ b/include/openPMD/RecordComponent.hpp @@ -440,11 +440,14 @@ OPENPMD_protected inline Data_t const &get() const { + // cannot call this in the const overload + // datasetDefined(*m_recordComponentData); return *m_recordComponentData; } inline Data_t &get() { + setDatasetDefined(*m_recordComponentData); return *m_recordComponentData; } diff --git a/include/openPMD/backend/BaseRecordComponent.hpp b/include/openPMD/backend/BaseRecordComponent.hpp index a6d4a5b70f..ebe71d17e8 100644 --- a/include/openPMD/backend/BaseRecordComponent.hpp +++ b/include/openPMD/backend/BaseRecordComponent.hpp @@ -49,6 +49,10 @@ namespace internal * instead defined via light-weight attributes. */ bool m_isConstant = false; + /* + * ... document this ... + */ + bool m_datasetDefined = false; BaseRecordComponentData(BaseRecordComponentData const &) = delete; BaseRecordComponentData(BaseRecordComponentData &&) = delete; @@ -166,6 +170,10 @@ class BaseRecordComponent : virtual public Attributable Attributable::setData(m_baseRecordComponentData); } + void setDatasetDefined(Data_t &); + + bool datasetDefined() const; + BaseRecordComponent(); BaseRecordComponent(NoInit); }; // BaseRecordComponent diff --git a/include/openPMD/backend/PatchRecordComponent.hpp b/include/openPMD/backend/PatchRecordComponent.hpp index 41f3239d3f..f2e3540f29 100644 --- a/include/openPMD/backend/PatchRecordComponent.hpp +++ b/include/openPMD/backend/PatchRecordComponent.hpp @@ -124,11 +124,14 @@ OPENPMD_protected inline Data_t const &get() const { + // cannot call this in the const overload + // setDatasetDefined(*m_recordComponentData); return *m_patchRecordComponentData; } inline Data_t &get() { + setDatasetDefined(*m_patchRecordComponentData); return *m_patchRecordComponentData; } diff --git a/src/backend/BaseRecordComponent.cpp b/src/backend/BaseRecordComponent.cpp index 9c4216e051..4de7eb797e 100644 --- a/src/backend/BaseRecordComponent.cpp +++ b/src/backend/BaseRecordComponent.cpp @@ -92,4 +92,16 @@ BaseRecordComponent::BaseRecordComponent() : Attributable(NoInit()) BaseRecordComponent::BaseRecordComponent(NoInit) : Attributable(NoInit()) {} + +void BaseRecordComponent::setDatasetDefined( + internal::BaseRecordComponentData &data) +{ + data.m_datasetDefined = true; +} + +bool BaseRecordComponent::datasetDefined() const +{ + auto & data = get(); + return data.m_datasetDefined; +} } // namespace openPMD