wm.h
Go to the documentation of this file.
1#pragma once
2
6
11
13{
14
16 {
17 public:
19
20
21 protected:
23 };
24
25 template <class SourceEntityT>
27 public EntityQueryProcessorBase<SourceEntityT, armem::wm::Entity>,
28 public HasDataMode
29 {
30 protected:
33
34
35 public:
40
41 using Base::process;
42
43 protected:
44 void
46 const typename SourceEntityT::EntitySnapshotT& snapshot) const
47 {
48 bool withData = (dataMode == armem::query::DataMode::WithData);
49 if (withData)
50 {
51 Base::addResultSnapshot(result, snapshot);
52 }
53 else
54 {
55 // Build result snapshot directly with metadata only - no deep copy of data.
56 // This avoids allocating and copying large aron::data::Dict structures
57 // that would be immediately discarded.
58 armem::wm::EntitySnapshot& resultSnapshot = result.addSnapshot(snapshot.time());
59
60 snapshot.forEachInstance(
61 [&resultSnapshot](const auto& srcInstance)
62 {
63 // Update access tracking on source
64 srcInstance.metadata().access();
65
66 // Add instance with metadata only, data stays nullptr
67 armem::wm::EntityInstance& dstInstance = resultSnapshot.addInstance();
68 dstInstance.metadata() = srcInstance.metadata();
69 // dstInstance.data() remains nullptr (default)
70 return true;
71 });
72 }
73 }
74 };
75} // namespace armarx::armem::server::query_proc::wm::detail
76
78{
79
81
102
104 public detail::CoreSegmentQueryProcessorBase<armem::wm::CoreSegment,
105 armem::wm::CoreSegment,
106 ProviderSegmentQueryProcessor>,
108 {
109 protected:
110 using Base = wm::detail::CoreSegmentQueryProcessorBase<armem::wm::CoreSegment,
115
116
117 public:
120
121 using Base::process;
122 };
123
125 public detail::MemoryQueryProcessorBase<armem::wm::Memory,
126 armem::wm::Memory,
127 CoreSegmentQueryProcessor>,
129 {
130 protected:
136
137
138 public:
140
141 using Base::process;
142 };
143
144} // namespace armarx::armem::server::query_proc::wm
145
147{
148
149 using EntityQueryProcessor = wm::detail::EntityQueryProcessor<server::wm::Entity>;
150
152 public wm::detail::ProviderSegmentQueryProcessorBase<server::wm::ProviderSegment,
153 armem::wm::ProviderSegment,
154 EntityQueryProcessor>,
155 public wm::detail::HasDataMode
156 {
157 protected:
158 using Base = wm::detail::ProviderSegmentQueryProcessorBase<server::wm::ProviderSegment,
163
164 public:
167 };
168
170 public wm::detail::CoreSegmentQueryProcessorBase<server::wm::CoreSegment,
171 armem::wm::CoreSegment,
172 ProviderSegmentQueryProcessor>,
173 public wm::detail::HasDataMode
174 {
175 protected:
176 using Base = wm::detail::CoreSegmentQueryProcessorBase<server::wm::CoreSegment,
181
182
183 public:
186
187 using Base::process;
188
189 /// Locks the core segment, then delegates back to `CoreSegmentQueryProcessorBase`.
190 void process(armem::wm::CoreSegment& result,
191 const armem::query::data::CoreSegmentQuery& query,
192 const CoreSegment& coreSegment) const override;
193 };
194
196 public wm::detail::MemoryQueryProcessorBase<server::wm::Memory,
197 armem::wm::Memory,
198 CoreSegmentQueryProcessor>,
199 public wm::detail::HasDataMode
200 {
201 protected:
202 using Base = wm::detail::MemoryQueryProcessorBase<server::wm::Memory,
207
208 public:
210
211 using Base::process;
212 };
213
214} // namespace armarx::armem::server::query_proc::wm_server
EntitySnapshotT & addSnapshot(const Time &timestamp)
Add a snapshot at the given time.
Definition EntityBase.h:673
EntityInstanceT & addInstance(const EntityInstanceT &instance)
Add a single instance with data.
wm::detail::CoreSegmentQueryProcessorBase< armem::wm::CoreSegment, armem::wm::CoreSegment, ProviderSegmentQueryProcessor > Base
Definition wm.h:110
CoreSegmentQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.cpp:25
MemoryQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.cpp:30
detail::MemoryQueryProcessorBase< armem::wm::Memory, armem::wm::Memory, CoreSegmentQueryProcessor > Base
Definition wm.h:131
detail::ProviderSegmentQueryProcessorBase< armem::wm::ProviderSegment, armem::wm::ProviderSegment, EntityQueryProcessor > Base
Definition wm.h:89
ProviderSegmentQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.cpp:17
void addResultSnapshot(ResultEntityT &result, const EntitySnapshotT &snapshot) const override
virtual void process(ResultEntityT &result, const armem::query::data::EntityQuery &query, const EntityT &entity) const override
EntityQueryProcessorBase< SourceEntityT, armem::wm::Entity > Base
Definition wm.h:31
EntityQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.h:36
void addResultSnapshot(armem::wm::Entity &result, const typename SourceEntityT::EntitySnapshotT &snapshot) const
Definition wm.h:45
HasDataMode(armem::query::DataMode dataMode)
Definition wm.cpp:8
virtual void process(ResultProviderSegmentT &result, const armem::query::data::ProviderSegmentQuery &query, const ProviderSegmentT &providerSegment) const override
void process(armem::wm::CoreSegment &result, const armem::query::data::CoreSegmentQuery &query, const CoreSegment &coreSegment) const override
Locks the core segment, then delegates back to CoreSegmentQueryProcessorBase.
Definition wm.cpp:50
CoreSegmentQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.cpp:44
wm::detail::CoreSegmentQueryProcessorBase< server::wm::CoreSegment, armem::wm::CoreSegment, ProviderSegmentQueryProcessor > Base
Definition wm.h:176
MemoryQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.cpp:58
wm::detail::MemoryQueryProcessorBase< server::wm::Memory, armem::wm::Memory, CoreSegmentQueryProcessor > Base
Definition wm.h:202
wm::detail::ProviderSegmentQueryProcessorBase< server::wm::ProviderSegment, armem::wm::ProviderSegment, EntityQueryProcessor > Base
Definition wm.h:158
ProviderSegmentQueryProcessor(armem::query::DataMode dataMode=armem::query::DataMode::WithData)
Definition wm.cpp:39
Client-side working memory core segment.
Client-side working entity instance.
Client-side working memory entity snapshot.
Client-side working memory entity.
Client-side working memory.
Client-side working memory provider segment.
@ WithData
Get structure and ARON data.
Definition DataMode.h:9
wm::detail::EntityQueryProcessor< server::wm::Entity > EntityQueryProcessor
Definition wm.h:149
detail::EntityQueryProcessor< armem::wm::Entity > EntityQueryProcessor
Definition wm.h:80