MemoryBase.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <map>
4 #include <string>
5 
6 #include "CoreSegmentBase.h"
8 #include "detail/Predictive.h"
10 #include "detail/lookup_mixins.h"
11 
12 namespace armarx::armem::base
13 {
14 
15  /**
16  * @brief Data of a memory consisting of multiple core segments.
17  */
18  template <class _CoreSegmentT, class _Derived>
19  class MemoryBase :
20  public detail::MemoryContainerBase<std::map<std::string, _CoreSegmentT>, _Derived>,
21  public detail::PredictiveContainer<_Derived>,
22  public detail::ForEachEntityInstanceMixin<_Derived>,
23  public detail::ForEachEntitySnapshotMixin<_Derived>,
24  public detail::ForEachEntityMixin<_Derived>,
25  public detail::ForEachProviderSegmentMixin<_Derived>,
26  public detail::GetFindInstanceMixin<_Derived>,
27  public detail::GetFindSnapshotMixin<_Derived>,
28  public detail::GetFindEntityMixin<_Derived>,
30  {
32 
33  public:
34  using typename Base::ContainerT;
35  using typename Base::DerivedT;
36 
37  using CoreSegmentT = _CoreSegmentT;
38  using ProviderSegmentT = typename CoreSegmentT::ProviderSegmentT;
39  using EntityT = typename ProviderSegmentT::EntityT;
40  using EntitySnapshotT = typename EntityT::EntitySnapshotT;
41  using EntityInstanceT = typename EntitySnapshotT::EntityInstanceT;
42 
44 
45  struct UpdateResult
46  {
52  std::vector<EntitySnapshotT> removedSnapshots;
53 
54  UpdateResult() = default;
55 
56  UpdateResult(const typename CoreSegmentT::UpdateResult& c) :
60  id(c.id),
62  {
63  }
64  };
65 
66  public:
68  {
69  }
70 
71  explicit MemoryBase(const std::string& name,
72  const std::vector<PredictionEngine>& predictionEngines = {}) :
73  MemoryBase(MemoryID().withMemoryName(name), predictionEngines)
74  {
75  }
76 
77  explicit MemoryBase(const MemoryID& id,
78  const std::vector<PredictionEngine>& predictionEngines = {}) :
80  {
81  }
82 
83  MemoryBase(const MemoryBase& other) = default;
84  MemoryBase(MemoryBase&& other) = default;
85  MemoryBase& operator=(const MemoryBase& other) = default;
86  MemoryBase& operator=(MemoryBase&& other) = default;
87 
88  // READ ACCESS
89 
90  // Get key
91  inline std::string&
92  name()
93  {
94  return this->id().memoryName;
95  }
96 
97  inline const std::string&
98  name() const
99  {
100  return this->id().memoryName;
101  }
102 
103  // Has child by key
104  bool
105  hasCoreSegment(const std::string& name) const
106  {
107  return this->findCoreSegment(name) != nullptr;
108  }
109 
110  // Has child by MemoryID
111  bool
113  {
114  return this->findCoreSegment(coreSegmentID) != nullptr;
115  }
116 
117  // Find child by key
118  CoreSegmentT*
119  findCoreSegment(const std::string& name)
120  {
121  return detail::findChildByKey(name, this->_container);
122  }
123 
124  const CoreSegmentT*
125  findCoreSegment(const std::string& name) const
126  {
127  return detail::findChildByKey(name, this->_container);
128  }
129 
130  // Get child by key
131  CoreSegmentT&
132  getCoreSegment(const std::string& name)
133  {
134  return detail::getChildByKey(name, this->_container, *this);
135  }
136 
137  const CoreSegmentT&
138  getCoreSegment(const std::string& name) const
139  {
140  return detail::getChildByKey(name, this->_container, *this);
141  }
142 
143  // Find child by MemoryID
144  CoreSegmentT*
146  {
148  return this->findCoreSegment(coreSegmentID.coreSegmentName);
149  }
150 
151  const CoreSegmentT*
153  {
155  return this->findCoreSegment(coreSegmentID.coreSegmentName);
156  }
157 
158  // Get child by MemoryID
159  CoreSegmentT&
161  {
163  return this->getCoreSegment(coreSegmentID.coreSegmentName);
164  }
165 
166  const CoreSegmentT&
168  {
170  return this->getCoreSegment(coreSegmentID.coreSegmentName);
171  }
172 
173  // get/findInstance are provided by GetFindInstanceMixin
174  // get/findSnapshot are provided by GetFindSnapshotMixin
175  // get/findEntity are provided by GetFindEntityMixin
176  // get/findProviderSegment are provided by GetFindProviderSegmentMixin
177 
178 
179  // ITERATION
180 
181  /**
182  * @param func Function like: bool process(CoreSegmentT& coreSeg)
183  */
184  template <class CoreSegmentFunctionT>
185  bool
186  forEachCoreSegment(CoreSegmentFunctionT&& func)
187  {
188  return this->forEachChild(func);
189  }
190 
191  /**
192  * @param func Function like: bool process(const CoreSegmentT& coreSeg)
193  */
194  template <class CoreSegmentFunctionT>
195  bool
196  forEachCoreSegment(CoreSegmentFunctionT&& func) const
197  {
198  return this->forEachChild(func);
199  }
200 
201  // forEachProviderSegment() is provided by ForEachProviderSegmentMixin.
202  // forEachEntity() is provided by ForEachEntityMixin.
203  // forEachSnapshot() is provided by ForEachEntitySnapshotMixin.
204  // forEachInstance() is provided by ForEachEntityInstanceMixin.
205 
206 
207  /**
208  * @param func Function like void process(EntityInstanceT& instance)>
209  */
210  template <class InstanceFunctionT>
211  bool
212  forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func)
213  {
215  id,
216  func,
217  *this,
218  id.hasCoreSegmentName(),
219  id.hasCoreSegmentName() ? this->findCoreSegment(id.coreSegmentName) : nullptr);
220  }
221 
222  /**
223  * @param func Function like void process(EntityInstanceT& instance)>
224  */
225  template <class InstanceFunctionT>
226  bool
227  forEachInstanceIn(const MemoryID& id, InstanceFunctionT&& func) const
228  {
230  id,
231  func,
232  *this,
233  id.hasCoreSegmentName(),
234  id.hasCoreSegmentName() ? this->findCoreSegment(id.coreSegmentName) : nullptr);
235  }
236 
237  std::vector<std::string>
239  {
240  return simox::alg::get_keys(this->_container);
241  }
242 
243  // MODIFICATION
244 
245  void
246  setName(const std::string& name)
247  {
248  this->id().memoryName = name;
249  }
250 
251  /**
252  * @brief Add an empty core segment with the given name, type and prediction engines.
253  * @param name The core segment name.
254  * @param coreSegmentType The core segment type (optional).
255  * @param predictionEngines The prediction engines supported by the core segment (optional).
256  * @return The added core segment.
257  */
258  CoreSegmentT&
259  addCoreSegment(const std::string& name,
260  aron::type::ObjectPtr coreSegmentType = nullptr,
261  const std::vector<PredictionEngine>& predictionEngines = {})
262  {
263  return this->_derived().addCoreSegment(name, name, coreSegmentType, predictionEngines);
264  }
265 
266  /// Copy and insert a core segment.
267  CoreSegmentT&
268  addCoreSegment(const CoreSegmentT& coreSegment)
269  {
270  return this->_derived().addCoreSegment(coreSegment.name(), CoreSegmentT(coreSegment));
271  }
272 
273  /// Move and insert a core segment.
274  CoreSegmentT&
276  {
277  const std::string name = coreSegment.name(); // Copy before move.
278  return this->_derived().addCoreSegment(name, std::move(coreSegment));
279  }
280 
281  /// Move and insert a core segment.
282  template <class... Args>
283  CoreSegmentT&
284  addCoreSegment(const std::string& name, Args... args)
285  {
286  CoreSegmentT& child = this->template _addChild<ChildT>(name, args...);
287  child.id() = this->id().withCoreSegmentName(name);
288  return child;
289  }
290 
291  /**
292  * @brief Store all updates in `commit`.
293  * @param commit The commit.
294  * @return The resulting memory IDs.
295  */
296  std::vector<UpdateResult>
297  update(const Commit& commit,
298  const bool addMissingCoreSegmentDuringUpdate = false,
299  const bool checkMemoryName = true)
300  {
301  std::vector<UpdateResult> results;
302  for (const EntityUpdate& update : commit.updates)
303  {
304  results.push_back(
305  this->update(update, addMissingCoreSegmentDuringUpdate, checkMemoryName));
306  }
307  return results;
308  }
309 
310  /**
311  * @brief Store the given update.
312  * @param update The update.
313  * @return The resulting entity snapshot's ID.
314  */
315  UpdateResult
317  const bool addMissingCoreSegmentDuringUpdate = false,
318  const bool checkMemoryName = true)
319  {
320  if (checkMemoryName)
321  {
322  this->_checkContainerName(update.entityID.memoryName, this->name());
323  }
324 
325  auto [inserted, coreSeg] = _addCoreSegmentIfMissing(update.entityID.coreSegmentName,
326  addMissingCoreSegmentDuringUpdate);
327 
328  // Update entry.
329  UpdateResult ret(coreSeg->update(update));
330  if (inserted)
331  {
332  ret.memoryUpdateType = UpdateType::InsertedNew;
333  }
334  else
335  {
336  ret.memoryUpdateType = UpdateType::UpdatedExisting;
337  }
338  return ret;
339  }
340 
341  /**
342  * @brief Merge another memory into this one. Append all data and types if possible
343  * @param m The other memory
344  */
345  template <class OtherDerivedT>
346  void
347  append(const OtherDerivedT& other)
348  {
349  other.forEachCoreSegment(
350  [this](const auto& coreSeg)
351  {
352  auto it = this->_container.find(coreSeg.name());
353  if (it == this->_container.end())
354  {
355  it = this->_container
356  .emplace(coreSeg.name(),
357  this->id().withCoreSegmentName(coreSeg.name()))
358  .first;
359  it->second.aronType() = coreSeg.aronType();
360  }
361 
362  /*TODO: if (it->second.aronType() != coreSeg.aronType())
363  {
364  ARMARX_WARNING << "When appending a wm to another wm type conflicts have "
365  "been found. Setting the type to NULL...";
366  it->second.aronType() = nullptr;
367  }*/
368 
369  it->second.append(coreSeg);
370  return true;
371  });
372  }
373 
374  bool
375  equalsDeep(const MemoryBase& other) const
376 
377  {
378  //std::cout << "Memory::equalsDeep" << std::endl;
379  if (this->size() != other.size())
380  {
381  return false;
382  }
383  for (const auto& [key, core] : this->_container)
384  {
385  if (not other.hasCoreSegment(key))
386  {
387  return false;
388  }
389  if (not core.equalsDeep(other.getCoreSegment(key)))
390  {
391  return false;
392  }
393  }
394  return true;
395  }
396 
397  static std::string
399  {
400  return "memory";
401  }
402 
403  std::string
404  getKeyString() const
405  {
406  return this->name();
407  }
408 
409 
410  protected:
411  std::pair<bool, CoreSegmentT*>
412  _addCoreSegmentIfMissing(const std::string& coreSegmentName,
413  const bool addMissingCoreSegmentDuringUpdate)
414  {
415  CoreSegmentT* coreSeg = nullptr;
416 
417  auto it = this->_container.find(coreSegmentName);
418  if (it == this->_container.end())
419  {
420  if (addMissingCoreSegmentDuringUpdate)
421  {
422  // Insert into map.
423  coreSeg = &addCoreSegment(coreSegmentName);
424  return {true, coreSeg};
425  }
426  else
427  {
428  throw error::MissingEntry::create<CoreSegmentT>(coreSegmentName, *this);
429  }
430  }
431  else
432  {
433  coreSeg = &it->second;
434  return {false, coreSeg};
435  }
436  }
437  };
438 } // namespace armarx::armem::base
armarx::armem::base::detail::GetFindInstanceMixin
Definition: lookup_mixins.h:81
armarx::armem::base
Definition: CoreSegmentBase.h:15
armarx::armem::base::MemoryBase::hasCoreSegment
bool hasCoreSegment(const MemoryID &coreSegmentID) const
Definition: MemoryBase.h:112
armarx::armem::base::MemoryBase::MemoryBase
MemoryBase()
Definition: MemoryBase.h:67
armarx::navigation::graph::coreSegmentID
const armem::MemoryID coreSegmentID
Definition: constants.h:30
armarx::armem::base::MemoryBase< CoreSegment, Memory >::ChildT
CoreSegmentT ChildT
Definition: MemoryBase.h:43
armarx::armem::base::detail::GetFindSnapshotMixin
Definition: lookup_mixins.h:224
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::_derived
DerivedT & _derived()
Definition: MemoryContainerBase.h:111
armarx::armem::base::MemoryBase::findCoreSegment
CoreSegmentT * findCoreSegment(const std::string &name)
Definition: MemoryBase.h:119
armarx::aron::ret
ReaderT::InputType T & ret
Definition: rw.h:21
MemoryContainerBase.h
armarx::armem::base::MemoryBase::UpdateResult::memoryUpdateType
armarx::armem::UpdateType memoryUpdateType
Definition: MemoryBase.h:47
armarx::armem::Commit
A bundle of updates to be sent to the memory.
Definition: Commit.h:89
armarx::armem::base::MemoryBase::getCoreSegmentNames
std::vector< std::string > getCoreSegmentNames() const
Definition: MemoryBase.h:238
armarx::armem::base::detail::ForEachProviderSegmentMixin
Definition: iteration_mixins.h:279
armarx::armem::base::MemoryBase::addCoreSegment
CoreSegmentT & addCoreSegment(const CoreSegmentT &coreSegment)
Copy and insert a core segment.
Definition: MemoryBase.h:268
armarx::armem::base::MemoryBase::getCoreSegment
CoreSegmentT & getCoreSegment(const std::string &name)
Definition: MemoryBase.h:132
armarx::armem::base::MemoryBase::getCoreSegment
const CoreSegmentT & getCoreSegment(const MemoryID &coreSegmentID) const
Definition: MemoryBase.h:167
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::forEachChild
bool forEachChild(ChildFunctionT &&func)
Definition: MemoryContainerBase.h:64
armarx::armem::base::MemoryBase::findCoreSegment
const CoreSegmentT * findCoreSegment(const MemoryID &coreSegmentID) const
Definition: MemoryBase.h:152
armarx::armem::base::MemoryBase::MemoryBase
MemoryBase(const std::string &name, const std::vector< PredictionEngine > &predictionEngines={})
Definition: MemoryBase.h:71
armarx::armem::base::detail::PredictiveContainer
Something that supports a set of prediction engines.
Definition: Predictive.h:91
armarx::armem::base::MemoryBase::getCoreSegment
CoreSegmentT & getCoreSegment(const MemoryID &coreSegmentID)
Definition: MemoryBase.h:160
armarx::armem::base::detail::MemoryContainerBase
Provides default implmentations of MemoryContainer, as well as iterators (which requires a template).
Definition: MemoryContainerBase.h:16
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:43
armarx::armem::base::MemoryBase::UpdateResult::entityUpdateType
armarx::armem::UpdateType entityUpdateType
Definition: MemoryBase.h:50
armarx::armem::base::MemoryBase::UpdateResult::providerSegmentUpdateType
armarx::armem::UpdateType providerSegmentUpdateType
Definition: MemoryBase.h:49
armarx::armem::base::MemoryBase::name
std::string & name()
Definition: MemoryBase.h:92
armarx::armem::base::MemoryBase::getCoreSegment
const CoreSegmentT & getCoreSegment(const std::string &name) const
Definition: MemoryBase.h:138
lookup_mixins.h
armarx::armem::base::MemoryBase::getLevelName
static std::string getLevelName()
Definition: MemoryBase.h:398
armarx::armem::MemoryID::coreSegmentName
std::string coreSegmentName
Definition: MemoryID.h:51
armarx::armem::base::MemoryBase::addCoreSegment
CoreSegmentT & addCoreSegment(CoreSegmentT &&coreSegment)
Move and insert a core segment.
Definition: MemoryBase.h:275
armarx::armem::base::MemoryBase::name
const std::string & name() const
Definition: MemoryBase.h:98
armarx::armem::UpdateType::UpdatedExisting
@ UpdatedExisting
armarx::armem::Commit::updates
std::vector< EntityUpdate > updates
The entity updates.
Definition: Commit.h:97
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::size
std::size_t size() const
Definition: MemoryContainerBase.h:48
armarx::armem::base::MemoryBase::forEachCoreSegment
bool forEachCoreSegment(CoreSegmentFunctionT &&func)
Definition: MemoryBase.h:186
armarx::armem::base::MemoryBase::hasCoreSegment
bool hasCoreSegment(const std::string &name) const
Definition: MemoryBase.h:105
armarx::armem::base::MemoryBase::update
UpdateResult update(const EntityUpdate &update, const bool addMissingCoreSegmentDuringUpdate=false, const bool checkMemoryName=true)
Store the given update.
Definition: MemoryBase.h:316
armarx::armem::base::MemoryBase::findCoreSegment
CoreSegmentT * findCoreSegment(const MemoryID &coreSegmentID)
Definition: MemoryBase.h:145
armarx::armem::base::MemoryBase::MemoryBase
MemoryBase(const MemoryID &id, const std::vector< PredictionEngine > &predictionEngines={})
Definition: MemoryBase.h:77
armarx::armem::MemoryID
A memory ID.
Definition: MemoryID.h:47
armarx::armem::base::MemoryBase::getKeyString
std::string getKeyString() const
Definition: MemoryBase.h:404
armarx::armem::UpdateType
UpdateType
The type of an update.
Definition: Commit.h:18
if
if(!yyvaluep)
Definition: Grammar.cpp:724
armarx::armem::MemoryID::withCoreSegmentName
MemoryID withCoreSegmentName(const std::string &name) const
Definition: MemoryID.cpp:404
armarx::armem::base::MemoryBase::operator=
MemoryBase & operator=(const MemoryBase &other)=default
armarx::armem::base::detail::findChildByKey
auto * findChildByKey(const KeyT &key, ContainerT &&container)
Find a child in a container by its key.
Definition: lookup_mixins.h:32
armarx::armem::base::MemoryBase::UpdateResult::coreSegmentUpdateType
armarx::armem::UpdateType coreSegmentUpdateType
Definition: MemoryBase.h:48
armarx::armem::base::detail::GetFindEntityMixin
Definition: lookup_mixins.h:409
armarx::armem::EntityUpdate
An update of an entity for a specific point in time.
Definition: Commit.h:27
armarx::armem::base::MemoryBase::UpdateResult::id
MemoryID id
Definition: MemoryBase.h:51
iteration_mixins.h
armarx::armem::base::MemoryBase::addCoreSegment
CoreSegmentT & addCoreSegment(const std::string &name, aron::type::ObjectPtr coreSegmentType=nullptr, const std::vector< PredictionEngine > &predictionEngines={})
Add an empty core segment with the given name, type and prediction engines.
Definition: MemoryBase.h:259
armarx::armem::base::detail::getChildByKey
auto & getChildByKey(const KeyT &key, ContainerT &&container, const ParentT &owner, KeyStringFn &&keyStringFn)
Retrieve a child in a container by its key.
Definition: lookup_mixins.h:49
armarx::armem::base::detail::checkHasCoreSegmentName
void checkHasCoreSegmentName(const MemoryID &coreSegmentID)
Throw armem::error::InvalidMemoryID if the given ID has core segment name.
Definition: lookup_mixins.cpp:45
armarx::armem::base::MemoryBase< CoreSegment, Memory >::EntityT
typename ProviderSegmentT::EntityT EntityT
Definition: MemoryBase.h:39
armarx::armem::base::MemoryBase
Data of a memory consisting of multiple core segments.
Definition: MemoryBase.h:19
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::DerivedT
_Derived DerivedT
Definition: MemoryContainerBase.h:23
armarx::armem::base::detail::MemoryItem::id
MemoryID & id()
Definition: MemoryItem.h:27
armarx::armem::base::detail::forEachInstanceIn
bool forEachInstanceIn(const MemoryID &id, FunctionT &&func, ParentT &parent, bool single, ChildT *child)
Definition: iteration_mixins.h:116
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::ContainerT
std::map< std::string, _CoreSegmentT > ContainerT
Definition: MemoryContainerBase.h:24
armarx::armem::base::MemoryBase< CoreSegment, Memory >::EntityInstanceT
typename EntitySnapshotT::EntityInstanceT EntityInstanceT
Definition: MemoryBase.h:41
armarx::armem::base::MemoryBase::UpdateResult::UpdateResult
UpdateResult()=default
armarx::armem::MemoryID::memoryName
std::string memoryName
Definition: MemoryID.h:50
armarx::armem::base::MemoryBase::equalsDeep
bool equalsDeep(const MemoryBase &other) const
Definition: MemoryBase.h:375
armarx::armem::base::detail::ForEachEntitySnapshotMixin
Definition: iteration_mixins.h:225
armarx::armem::base::MemoryBase::addCoreSegment
CoreSegmentT & addCoreSegment(const std::string &name, Args... args)
Move and insert a core segment.
Definition: MemoryBase.h:284
armarx::armem::base::MemoryBase< CoreSegment, Memory >::EntitySnapshotT
typename EntityT::EntitySnapshotT EntitySnapshotT
Definition: MemoryBase.h:40
armarx::armem::base::MemoryBase::UpdateResult::UpdateResult
UpdateResult(const typename CoreSegmentT::UpdateResult &c)
Definition: MemoryBase.h:56
armarx::armem::base::detail::ForEachEntityInstanceMixin
Definition: iteration_mixins.h:137
armarx::armem::UpdateType::InsertedNew
@ InsertedNew
armarx::armem::base::MemoryBase::forEachInstanceIn
bool forEachInstanceIn(const MemoryID &id, InstanceFunctionT &&func)
Definition: MemoryBase.h:212
armarx::armem::base::detail::ForEachEntityMixin
Definition: iteration_mixins.h:251
armarx::armem::base::MemoryBase::append
void append(const OtherDerivedT &other)
Merge another memory into this one.
Definition: MemoryBase.h:347
armarx::armem::base::MemoryBase::findCoreSegment
const CoreSegmentT * findCoreSegment(const std::string &name) const
Definition: MemoryBase.h:125
CoreSegmentBase.h
armarx::armem::base::MemoryBase::forEachInstanceIn
bool forEachInstanceIn(const MemoryID &id, InstanceFunctionT &&func) const
Definition: MemoryBase.h:227
armarx::armem::base::MemoryBase< CoreSegment, Memory >::CoreSegmentT
CoreSegment CoreSegmentT
Definition: MemoryBase.h:37
armarx::armem::base::MemoryBase::update
std::vector< UpdateResult > update(const Commit &commit, const bool addMissingCoreSegmentDuringUpdate=false, const bool checkMemoryName=true)
Store all updates in commit.
Definition: MemoryBase.h:297
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
armarx::armem::base::detail::Predictive< _Derived >::predictionEngines
const std::vector< PredictionEngine > & predictionEngines() const
Definition: Predictive.h:48
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::_container
ContainerT _container
Definition: MemoryContainerBase.h:150
armarx::armem::base::MemoryBase::UpdateResult
Definition: MemoryBase.h:45
armarx::armem::base::MemoryBase::forEachCoreSegment
bool forEachCoreSegment(CoreSegmentFunctionT &&func) const
Definition: MemoryBase.h:196
armarx::armem::base::detail::GetFindProviderSegmentMixin
Definition: lookup_mixins.h:458
armarx::armem::EntityUpdate::entityID
MemoryID entityID
The entity's ID.
Definition: Commit.h:30
armarx::armem::base::MemoryBase::UpdateResult::removedSnapshots
std::vector< EntitySnapshotT > removedSnapshots
Definition: MemoryBase.h:52
armarx::armem::base::MemoryBase::setName
void setName(const std::string &name)
Definition: MemoryBase.h:246
armarx::armem::base::detail::MemoryContainerBase< std::map< std::string, _CoreSegmentT >, _Derived >::_checkContainerName
void _checkContainerName(const std::string &gottenName, const std::string &actualName, bool emptyOk=true) const
Definition: MemoryContainerBase.h:124
Predictive.h
armarx::armem::base::MemoryBase< CoreSegment, Memory >::ProviderSegmentT
typename CoreSegmentT::ProviderSegmentT ProviderSegmentT
Definition: MemoryBase.h:38
armarx::armem::base::MemoryBase::_addCoreSegmentIfMissing
std::pair< bool, CoreSegmentT * > _addCoreSegmentIfMissing(const std::string &coreSegmentName, const bool addMissingCoreSegmentDuringUpdate)
Definition: MemoryBase.h:412
armarx::human::MemoryID
const armem::MemoryID MemoryID
Definition: memory_ids.cpp:29