FunctionalVisitor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <functional>
4 
5 #include "Visitor.h"
6 
7 namespace armarx::armem::wm
8 {
9 
10  /**
11  * @brief A `Visitor` which can be parametrized by `std::function`
12  * instead of inheriting and overriding.
13  */
14  class FunctionalVisitor : public Visitor
15  {
16  public:
18  virtual ~FunctionalVisitor() override;
19 
20  bool
22  {
24  }
25 
26  bool
27  visitEnter(CoreSegment& coreSegment) override
28  {
29  return coreSegmentFn ? coreSegmentFn(coreSegment) : Visitor::visitEnter(coreSegment);
30  }
31 
32  bool
33  visitEnter(ProviderSegment& providerSegment) override
34  {
35  return providerSegmentFn ? providerSegmentFn(providerSegment)
36  : Visitor::visitEnter(providerSegment);
37  }
38 
39  bool
40  visitEnter(Entity& entity) override
41  {
42  return entityFn ? entityFn(entity) : Visitor::visitEnter(entity);
43  }
44 
45  bool
46  visitEnter(EntitySnapshot& snapshot) override
47  {
48  return snapshotFn ? snapshotFn(snapshot) : Visitor::visitEnter(snapshot);
49  }
50 
51  bool
52  visit(EntityInstance& instance) override
53  {
54  return instanceFn ? instanceFn(instance) : Visitor::visit(instance);
55  }
56 
57  // Const versions
58 
59 
60  bool
61  visitEnter(const Memory& memory) override
62  {
64  }
65 
66  bool
67  visitEnter(const CoreSegment& coreSegment) override
68  {
69  return coreSegmentConstFn ? coreSegmentConstFn(coreSegment)
70  : Visitor::visitEnter(coreSegment);
71  }
72 
73  bool
74  visitEnter(const ProviderSegment& providerSegment) override
75  {
76  return providerSegmentConstFn ? providerSegmentConstFn(providerSegment)
77  : Visitor::visitEnter(providerSegment);
78  }
79 
80  bool
81  visitEnter(const Entity& entity) override
82  {
83  return entityConstFn ? entityConstFn(entity) : Visitor::visitEnter(entity);
84  }
85 
86  bool
87  visitEnter(const EntitySnapshot& snapshot) override
88  {
89  return snapshotConstFn ? snapshotConstFn(snapshot) : Visitor::visitEnter(snapshot);
90  }
91 
92  bool
93  visit(const EntityInstance& instance) override
94  {
95  return instanceConstFn ? instanceConstFn(instance) : Visitor::visit(instance);
96  }
97 
98  std::function<bool(Memory& memory)> memoryFn;
99  std::function<bool(const Memory& memory)> memoryConstFn;
100 
101  std::function<bool(CoreSegment& coreSegment)> coreSegmentFn;
102  std::function<bool(const CoreSegment& coreSegment)> coreSegmentConstFn;
103 
104  std::function<bool(ProviderSegment& providerSegment)> providerSegmentFn;
105  std::function<bool(const ProviderSegment& providerSegment)> providerSegmentConstFn;
106 
107  std::function<bool(Entity& entity)> entityFn;
108  std::function<bool(const Entity& entity)> entityConstFn;
109 
110  std::function<bool(EntitySnapshot& snapshot)> snapshotFn;
111  std::function<bool(const EntitySnapshot& snapshot)> snapshotConstFn;
112 
113  std::function<bool(EntityInstance& instance)> instanceFn;
114  std::function<bool(const EntityInstance& instance)> instanceConstFn;
115  };
116 
117 } // namespace armarx::armem::wm
armarx::armem::wm::FunctionalVisitor::coreSegmentConstFn
std::function< bool(const CoreSegment &coreSegment)> coreSegmentConstFn
Definition: FunctionalVisitor.h:102
armarx::armem::wm::FunctionalVisitor::entityFn
std::function< bool(Entity &entity)> entityFn
Definition: FunctionalVisitor.h:107
armarx::armem::wm::FunctionalVisitor::providerSegmentConstFn
std::function< bool(const ProviderSegment &providerSegment)> providerSegmentConstFn
Definition: FunctionalVisitor.h:105
armarx::armem::wm::ProviderSegment
Client-side working memory provider segment.
Definition: memory_definitions.h:105
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
armarx::armem::wm::FunctionalVisitor::FunctionalVisitor
FunctionalVisitor()
Definition: FunctionalVisitor.cpp:11
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(EntitySnapshot &snapshot) override
Definition: FunctionalVisitor.h:46
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(const ProviderSegment &providerSegment) override
Definition: FunctionalVisitor.h:74
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(const Memory &memory) override
Definition: FunctionalVisitor.h:61
armarx::armem::wm::FunctionalVisitor::~FunctionalVisitor
virtual ~FunctionalVisitor() override
Definition: FunctionalVisitor.cpp:15
armarx::armem::wm::FunctionalVisitor::entityConstFn
std::function< bool(const Entity &entity)> entityConstFn
Definition: FunctionalVisitor.h:108
Visitor.h
armarx::memory
Brief description of class memory.
Definition: memory.h:38
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(const EntitySnapshot &snapshot) override
Definition: FunctionalVisitor.h:87
armarx::armem::wm::Visitor
A visitor for the hierarchical memory data structure.
Definition: Visitor.h:15
armarx::armem::wm::FunctionalVisitor::memoryFn
std::function< bool(Memory &memory)> memoryFn
Definition: FunctionalVisitor.h:98
armarx::armem::wm::FunctionalVisitor::instanceFn
std::function< bool(EntityInstance &instance)> instanceFn
Definition: FunctionalVisitor.h:113
armarx::armem::wm
Definition: MemoryNameSystem.h:45
armarx::armem::wm::FunctionalVisitor::visit
bool visit(const EntityInstance &instance) override
Definition: FunctionalVisitor.h:93
armarx::armem::wm::CoreSegment
Client-side working memory core segment.
Definition: memory_definitions.h:119
armarx::armem::wm::FunctionalVisitor::visit
bool visit(EntityInstance &instance) override
Definition: FunctionalVisitor.h:52
armarx::armem::wm::Memory
Client-side working memory.
Definition: memory_definitions.h:133
armarx::armem::wm::Visitor::visitEnter
virtual bool visitEnter(Memory &memory)
Definition: Visitor.h:30
armarx::armem::wm::FunctionalVisitor::instanceConstFn
std::function< bool(const EntityInstance &instance)> instanceConstFn
Definition: FunctionalVisitor.h:114
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(Entity &entity) override
Definition: FunctionalVisitor.h:40
armarx::armem::wm::FunctionalVisitor::coreSegmentFn
std::function< bool(CoreSegment &coreSegment)> coreSegmentFn
Definition: FunctionalVisitor.h:101
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(ProviderSegment &providerSegment) override
Definition: FunctionalVisitor.h:33
armarx::armem::wm::FunctionalVisitor::memoryConstFn
std::function< bool(const Memory &memory)> memoryConstFn
Definition: FunctionalVisitor.h:99
armarx::armem::wm::FunctionalVisitor::snapshotFn
std::function< bool(EntitySnapshot &snapshot)> snapshotFn
Definition: FunctionalVisitor.h:110
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(Memory &memory) override
Definition: FunctionalVisitor.h:21
armarx::armem::wm::EntitySnapshot
Client-side working memory entity snapshot.
Definition: memory_definitions.h:80
armarx::armem::wm::FunctionalVisitor::snapshotConstFn
std::function< bool(const EntitySnapshot &snapshot)> snapshotConstFn
Definition: FunctionalVisitor.h:111
armarx::armem::wm::FunctionalVisitor
A Visitor which can be parametrized by std::function instead of inheriting and overriding.
Definition: FunctionalVisitor.h:14
armarx::armem::wm::Entity
Client-side working memory entity.
Definition: memory_definitions.h:93
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(const CoreSegment &coreSegment) override
Definition: FunctionalVisitor.h:67
armarx::armem::wm::FunctionalVisitor::providerSegmentFn
std::function< bool(ProviderSegment &providerSegment)> providerSegmentFn
Definition: FunctionalVisitor.h:104
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(CoreSegment &coreSegment) override
Definition: FunctionalVisitor.h:27
armarx::armem::wm::FunctionalVisitor::visitEnter
bool visitEnter(const Entity &entity) override
Definition: FunctionalVisitor.h:81
armarx::armem::wm::Visitor::visit
virtual bool visit(EntityInstance &instance)
Definition: Visitor.h:90