Skip to content

Commit 6b4253b

Browse files
committed
Move defaults impl to classes
1 parent 93f1ec2 commit 6b4253b

File tree

4 files changed

+84
-113
lines changed

4 files changed

+84
-113
lines changed

include/openPMD/Iteration.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,10 @@ class Iteration
441441
*
442442
*/
443443
void runDeferredParseAccess();
444+
445+
protected:
446+
void defaults_impl(bool write, OpenpmdStandard) override;
447+
auto as_attributable() -> Attributable & override;
444448
}; // Iteration
445449

446450
extern template float Iteration::time<float>() const;

include/openPMD/backend/ScientificDefaults.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,21 @@ struct ConfigAttribute;
1616
*/
1717
class ScientificDefaults
1818
{
19-
private:
19+
protected:
2020
[[nodiscard]] auto defaultAttribute(char const *attrName)
2121
-> ConfigAttribute;
2222

23-
template <typename Parent, bool write>
24-
void addParentDefaults(OpenpmdStandard);
23+
// template <typename Parent, bool write>
24+
// void addParentDefaults(OpenpmdStandard);
2525

2626
virtual void defaults_impl(bool write, OpenpmdStandard);
27+
virtual auto as_attributable() -> Attributable &;
2728

2829
protected:
2930
// Called upon Iteration::close(), will fill in defaults below Iteration
3031
// level. If the Iteration is not explicitly closed, will be called upon
3132
// Series::close().
32-
void writeDefaultsRecursively(OpenpmdStandard);
33+
// void writeDefaultsRecursively(OpenpmdStandard);
3334
// Currently called internally only from writeDefaultsRecursively
3435
void writeDefaults(OpenpmdStandard);
3536
// Convention: This is called for each openPMD object (group, dataset)

src/Iteration.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "openPMD/auxiliary/Variant.hpp"
3434
#include "openPMD/backend/Attributable.hpp"
3535
#include "openPMD/backend/ScientificDefaults.hpp"
36+
#include "openPMD/backend/ScientificDefaults_impl.hpp"
3637
#include "openPMD/backend/Variant_internal.hpp"
3738
#include "openPMD/backend/Writable.hpp"
3839

@@ -934,6 +935,28 @@ void Iteration::runDeferredParseAccess()
934935
}
935936
}
936937

938+
void Iteration::defaults_impl(bool write, OpenpmdStandard)
939+
{
940+
using namespace internal;
941+
auto float_types = get_float_types();
942+
auto const wor = write ? WriteOrRead::Write : WriteOrRead::Read;
943+
944+
defaultAttribute("time")
945+
.template withSetter<Iteration>(0., &Iteration::setTime)
946+
.withReader(float_types, require_scalar)(wor);
947+
defaultAttribute("dt")
948+
.template withSetter<Iteration>(1., &Iteration::setDt)
949+
.withReader(float_types, require_scalar)(wor);
950+
defaultAttribute("timeUnitSI")
951+
.template withSetter<Iteration>(1.0, &Iteration::setTimeUnitSI)
952+
.withReader(float_types, require_type<double>())(wor);
953+
}
954+
955+
auto Iteration::as_attributable() -> Attributable &
956+
{
957+
return *this;
958+
}
959+
937960
template float Iteration::time<float>() const;
938961
template double Iteration::time<double>() const;
939962
template long double Iteration::time<long double>() const;

src/backend/ScientificDefaults.cpp

Lines changed: 52 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#if 0
21
#include "openPMD/backend/ScientificDefaults.hpp"
32
#include "openPMD/backend/ScientificDefaults_auxiliary.hpp"
43
#include "openPMD/backend/ScientificDefaults_impl.hpp"
@@ -24,90 +23,58 @@
2423
namespace openPMD::internal
2524
{
2625
// 7. ScientificDefaults template implementations
27-
template <typename Child>
28-
auto ScientificDefaults<Child>::asChild() -> Child &
29-
{
30-
return *static_cast<Child *>(this);
31-
}
32-
33-
template <typename Child>
34-
auto ScientificDefaults<Child>::asChild() const -> Child const &
35-
{
36-
return *static_cast<Child const *>(this);
37-
}
38-
39-
template <typename Child>
40-
[[nodiscard]] auto
41-
ScientificDefaults<Child>::defaultAttribute(char const *attrName)
26+
[[nodiscard]] auto ScientificDefaults::defaultAttribute(char const *attrName)
4227
-> ConfigAttribute
4328
{
44-
return ConfigAttribute{asChild(), attrName};
29+
return ConfigAttribute{as_attributable(), attrName};
4530
}
4631

47-
template <typename Child>
48-
template <typename Parent, bool write>
49-
void ScientificDefaults<Child>::addParentDefaults(OpenpmdStandard standard)
50-
{
51-
// Cannot directly call read_impl as it is private
52-
if constexpr (write)
53-
{
54-
asChild().ScientificDefaults<Parent>::writeDefaults(standard);
55-
}
56-
else
57-
{
58-
asChild().ScientificDefaults<Parent>::readDefaults(standard);
59-
}
60-
}
61-
62-
template <typename Child>
63-
void ScientificDefaults<Child>::writeDefaultsRecursively(
64-
OpenpmdStandard standard)
65-
{
66-
writeDefaults(standard);
67-
if constexpr (IsContainer_v<Child>)
68-
{
69-
using Container_t = AsContainer_t<Child>;
70-
using mapped_type = typename Container_t::mapped_type;
71-
if constexpr (HasScientificDefaults_v<mapped_type>)
72-
{
73-
for (auto &[_, right] : asChild())
74-
{
75-
(void)_;
76-
right.ScientificDefaults<mapped_type>::writeDefaultsRecursively(
77-
standard);
78-
}
79-
}
80-
}
81-
// sic! no else
32+
// {
33+
// writeDefaults(standard);
34+
// if constexpr (IsContainer_v)
35+
// {
36+
// using Container_t = AsContainer_t;
37+
// using mapped_type = typename Container_t::mapped_type;
38+
// if constexpr (HasScientificDefaults_v<mapped_type>)
39+
// {
40+
// for (auto &[_, right] : asChild())
41+
// {
42+
// (void)_;
43+
// right.ScientificDefaults<mapped_type>::writeDefaultsRecursively(
44+
// standard);
45+
// }
46+
// }
47+
// }
48+
// // sic! no else
8249

83-
if constexpr (std::is_same_v<Child, Iteration>)
84-
{
85-
for (auto &[_, right] : asChild().meshes)
86-
{
87-
(void)_;
88-
right.ScientificDefaults<Mesh>::writeDefaultsRecursively(standard);
89-
}
90-
for (auto &[_, right] : asChild().particles)
91-
{
92-
(void)_;
93-
right.ScientificDefaults<ParticleSpecies>::writeDefaultsRecursively(
94-
standard);
95-
}
96-
}
97-
else if constexpr (std::is_same_v<Child, ParticleSpecies>)
98-
{
99-
for (auto &[_, right] : asChild().particlePatches)
100-
{
101-
(void)_;
102-
right.ScientificDefaults<PatchRecord>::writeDefaultsRecursively(
103-
standard);
104-
}
105-
}
106-
}
50+
// if constexpr (std::is_same_v<Child, Iteration>)
51+
// {
52+
// for (auto &[_, right] : asChild().meshes)
53+
// {
54+
// (void)_;
55+
// right.ScientificDefaults<Mesh>::writeDefaultsRecursively(standard);
56+
// }
57+
// for (auto &[_, right] : asChild().particles)
58+
// {
59+
// (void)_;
60+
// right.ScientificDefaults<ParticleSpecies>::writeDefaultsRecursively(
61+
// standard);
62+
// }
63+
// }
64+
// else if constexpr (std::is_same_v<Child, ParticleSpecies>)
65+
// {
66+
// for (auto &[_, right] : asChild().particlePatches)
67+
// {
68+
// (void)_;
69+
// right.ScientificDefaults<PatchRecord>::writeDefaultsRecursively(
70+
// standard);
71+
// }
72+
// }
73+
// }
10774

108-
template <typename Child>
75+
#if 0
10976
template <bool write>
110-
void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
77+
void ScientificDefaults::defaults_impl(OpenpmdStandard standard)
11178
{
11279
auto float_types = get_float_types();
11380
auto string_types = get_string_types();
@@ -134,15 +101,6 @@ void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
134101

135102
if constexpr (std::is_same_v<Child, Iteration>)
136103
{
137-
defaultAttribute("time")
138-
.template withSetter<Iteration>(0., &Iteration::setTime)
139-
.withReader(float_types, require_scalar)(wor);
140-
defaultAttribute("dt")
141-
.template withSetter<Iteration>(1., &Iteration::setDt)
142-
.withReader(float_types, require_scalar)(wor);
143-
defaultAttribute("timeUnitSI")
144-
.template withSetter<Iteration>(1.0, &Iteration::setTimeUnitSI)
145-
.withReader(float_types, require_type<double>())(wor);
146104
}
147105
else if constexpr (std::is_same_v<Child, Mesh>)
148106
{
@@ -276,7 +234,7 @@ void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
276234
// .withReader(float_types, require_type<double>())
277235
(wor);
278236
}
279-
else if constexpr (detail::IsBaseRecord_v<Child>)
237+
else if constexpr (detail::IsBaseRecord_v)
280238
{
281239
defaultAttribute("unitDimension")
282240
.withGenericSetter(unit_representations::AsArray{})
@@ -290,33 +248,18 @@ void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
290248
}
291249
else
292250
{
293-
static_assert(auxiliary::dependent_false_v<Child>, "Unknown class");
251+
static_assert(auxiliary::dependent_false_v, "Unknown class");
294252
}
295253
}
254+
#endif
296255

297-
template <typename Child>
298-
void ScientificDefaults<Child>::writeDefaults(OpenpmdStandard standard)
256+
void ScientificDefaults::writeDefaults(OpenpmdStandard standard)
299257
{
300-
defaults_impl</* write = */ true>(standard);
258+
defaults_impl(/* write = */ true, standard);
301259
}
302260

303-
template <typename Child>
304-
void ScientificDefaults<Child>::readDefaults(OpenpmdStandard standard)
261+
void ScientificDefaults::readDefaults(OpenpmdStandard standard)
305262
{
306-
defaults_impl</* write = */ false>(standard);
263+
defaults_impl(/* write = */ false, standard);
307264
}
308-
309-
// 8. Template instantiations
310-
template class ScientificDefaults<Iteration>;
311-
template class ScientificDefaults<Mesh>;
312-
template class ScientificDefaults<MeshRecordComponent>;
313-
template class ScientificDefaults<RecordComponent>;
314-
template class ScientificDefaults<PatchRecordComponent>;
315-
template class ScientificDefaults<ParticleSpecies>;
316-
template class ScientificDefaults<Record>;
317-
template class ScientificDefaults<BaseRecord<MeshRecordComponent>>;
318-
template class ScientificDefaults<BaseRecord<PatchRecordComponent>>;
319-
template class ScientificDefaults<BaseRecord<RecordComponent>>;
320-
template class ScientificDefaults<PatchRecord>;
321265
} // namespace openPMD::internal
322-
#endif

0 commit comments

Comments
 (0)