Skip to content

Commit 12c5ee5

Browse files
committed
... wip visitor without templates ...
1 parent 5f156ad commit 12c5ee5

10 files changed

Lines changed: 57 additions & 16 deletions

include/openPMD/Iteration.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "openPMD/auxiliary/Variant.hpp"
2828
#include "openPMD/backend/Attributable.hpp"
2929
#include "openPMD/backend/Container.hpp"
30+
#include "openPMD/backend/HierarchyVisitor.hpp"
3031
#include "openPMD/backend/scientific_defaults/ScientificDefaults.hpp"
3132

3233
#include <cstdint>
@@ -283,8 +284,7 @@ class Iteration
283284
[[deprecated("This attribute is no longer set by the openPMD-api.")]] bool
284285
closedByWriter() const;
285286

286-
template <typename Visitor>
287-
void visitHierarchy(Visitor &&v)
287+
void visitHierarchy(HierarchyVisitor &v) override
288288
{
289289
v(*this);
290290
meshes.visitHierarchy(v);

include/openPMD/ParticleSpecies.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "openPMD/Record.hpp"
2525
#include "openPMD/backend/Attributable.hpp"
2626
#include "openPMD/backend/Container.hpp"
27+
#include "openPMD/backend/HierarchyVisitor.hpp"
2728
#include "openPMD/backend/scientific_defaults/ScientificDefaults.hpp"
2829

2930
#include <string>
@@ -45,8 +46,7 @@ class ParticleSpecies
4546
public:
4647
ParticlePatches particlePatches;
4748

48-
template <typename Visitor>
49-
void visitHierarchy(Visitor &&v)
49+
void visitHierarchy(HierarchyVisitor &v) override
5050
{
5151
Container<Record>::visitHierarchy(v);
5252
particlePatches.visitHierarchy(v);

include/openPMD/RecordComponent.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "openPMD/auxiliary/UniquePtr.hpp"
2828
#include "openPMD/backend/Attributable.hpp"
2929
#include "openPMD/backend/BaseRecordComponent.hpp"
30+
#include "openPMD/backend/HierarchyVisitor.hpp"
3031
#include "openPMD/backend/scientific_defaults/ScientificDefaults.hpp"
3132

3233
// comment to prevent this include from being moved by clang-format
@@ -486,8 +487,7 @@ class RecordComponent
486487
auto visit(Args &&...args) -> decltype(Visitor::template call<char>(
487488
std::declval<RecordComponent &>(), std::forward<Args>(args)...));
488489

489-
template <typename Visitor>
490-
void visitHierarchy(Visitor &&v)
490+
void visitHierarchy(HierarchyVisitor &v) override
491491
{
492492
v(*this);
493493
}

include/openPMD/Series.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "openPMD/auxiliary/Variant.hpp"
3232
#include "openPMD/backend/Attributable.hpp"
3333
#include "openPMD/backend/Container.hpp"
34+
#include "openPMD/backend/HierarchyVisitor.hpp"
3435
#include "openPMD/backend/ParsePreference.hpp"
3536
#include "openPMD/config.hpp"
3637
#include "openPMD/snapshots/Snapshots.hpp"
@@ -778,8 +779,7 @@ class Series : public Attributable
778779
*/
779780
void close();
780781

781-
template <typename Visitor>
782-
void visitHierarchy(Visitor &&v)
782+
void visitHierarchy(HierarchyVisitor &v) override
783783
{
784784
v(*this);
785785
get().iterations.visitHierarchy(v);

include/openPMD/backend/Attributable.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "openPMD/ThrowError.hpp"
2626
#include "openPMD/auxiliary/OutOfRangeMsg.hpp"
2727
#include "openPMD/backend/Attribute.hpp"
28+
#include "openPMD/backend/HierarchyVisitor.hpp"
2829
#include "openPMD/backend/Writable.hpp"
2930

3031
#include <cstddef>
@@ -401,6 +402,8 @@ class Attributable
401402
*/
402403
void touch();
403404

405+
virtual void visitHierarchy(HierarchyVisitor &);
406+
404407
[[nodiscard]] OpenpmdStandard openPMDStandard() const;
405408

406409
// clang-format off

include/openPMD/backend/BaseRecord.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "openPMD/auxiliary/Variant.hpp"
2727
#include "openPMD/backend/BaseRecordComponent.hpp"
2828
#include "openPMD/backend/Container.hpp"
29+
#include "openPMD/backend/HierarchyVisitor.hpp"
2930
#include "openPMD/backend/scientific_defaults/ScientificDefaults.hpp"
3031

3132
#include <array>
@@ -366,8 +367,7 @@ class BaseRecord
366367
*/
367368
bool scalar() const;
368369

369-
template <typename Visitor>
370-
void visitHierarchy(Visitor &&v)
370+
void visitHierarchy(HierarchyVisitor &v) override
371371
{
372372
v(*this);
373373
for (auto &p : *this)

include/openPMD/backend/Container.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "openPMD/IO/Access.hpp"
2525
#include "openPMD/auxiliary/TypeTraits.hpp"
2626
#include "openPMD/backend/Attributable.hpp"
27+
#include "openPMD/backend/HierarchyVisitor.hpp"
2728

2829
#include <initializer_list>
2930
#include <map>
@@ -262,8 +263,7 @@ class Container : virtual public Attributable
262263
return container().emplace(std::forward<Args>(args)...);
263264
}
264265

265-
template <typename Visitor>
266-
void visitHierarchy(Visitor &&v)
266+
void visitHierarchy(HierarchyVisitor &v) override
267267
{
268268
v(*this);
269269
for (auto &p : *this)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#pragma once
2+
3+
#include <map>
4+
#include <string>
5+
6+
namespace openPMD
7+
{
8+
class Series;
9+
class Iteration;
10+
class Mesh;
11+
class ParticleSpecies;
12+
class PatchRecord;
13+
class PatchRecordComponent;
14+
class RecordComponent;
15+
class MeshRecordComponent;
16+
template <typename, typename, typename>
17+
class Container;
18+
template <typename Val>
19+
using Cont = Container<Val, std::string, std::map<std::string, Val>>;
20+
template <typename>
21+
class BaseRecord;
22+
23+
class HierarchyVisitor
24+
{
25+
public:
26+
virtual void operator()(Series &) = 0;
27+
virtual void operator()(Iteration &) = 0;
28+
virtual void operator()(Cont<Iteration> &) = 0;
29+
virtual void operator()(Cont<Mesh> &) = 0;
30+
virtual void operator()(Cont<ParticleSpecies> &) = 0;
31+
virtual void operator()(Cont<PatchRecord> &) = 0;
32+
virtual void operator()(Cont<PatchRecordComponent> &) = 0;
33+
virtual void operator()(Mesh &) = 0;
34+
virtual void operator()(ParticleSpecies &) = 0;
35+
virtual void operator()(RecordComponent &) = 0;
36+
virtual void operator()(MeshRecordComponent &) = 0;
37+
virtual void operator()(PatchRecordComponent &) = 0;
38+
};
39+
} // namespace openPMD

include/openPMD/backend/MeshRecordComponent.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#pragma once
2222

2323
#include "openPMD/RecordComponent.hpp"
24+
#include "openPMD/backend/HierarchyVisitor.hpp"
2425
#include "openPMD/backend/scientific_defaults/ScientificDefaults.hpp"
2526

2627
#include <vector>
@@ -94,8 +95,7 @@ class MeshRecordComponent : public RecordComponent
9495
template <typename T>
9596
MeshRecordComponent &makeConstant(T);
9697

97-
template <typename Visitor>
98-
void visitHierarchy(Visitor &&v)
98+
void visitHierarchy(HierarchyVisitor &v) override
9999
{
100100
v(*this);
101101
}

include/openPMD/backend/PatchRecordComponent.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ class PatchRecordComponent : public RecordComponent
8989
template <typename T>
9090
void store(T);
9191

92-
template <typename Visitor>
93-
void visitHierarchy(Visitor &&v)
92+
void visitHierarchy(HierarchyVisitor &v) override
9493
{
9594
v(*this);
9695
}

0 commit comments

Comments
 (0)