Entity.h
Go to the documentation of this file.
1 /*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package MemoryX::Core
17 * @author Alexey Kozlov ( kozlov at kit dot edu), Kai Welke ( welke at kit dot edu )
18 * @date 2012
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #pragma once
24 
25 #include "AbstractEntityWrapper.h"
26 #include "EntityAttribute.h"
27 
28 #include <MemoryX/interface/core/EntityBase.h>
29 #include <MemoryX/interface/core/ProbabilityMeasures.h>
30 
32 
33 #include <type_traits>
34 #include <shared_mutex>
35 #include <mutex>
36 #include <list>
37 
38 namespace memoryx
39 {
40 
41  class Entity;
42  class EntityRef;
43  /**
44  * Typedef of EntityPtr as IceInternal::Handle<Entity> for convenience.
45  */
47 
48  /**
49  \page MemoryX-HowTos-create-new-entities How to create new Entities in MemoryX
50 
51  \li define a class in slice which inherits from EntityBase and add custom accessor methods
52  \code
53  #include <MemoryX/interface/core/EntityBase.ice>
54 
55  memoryx
56  {
57  ["cpp:virtual"]
58  class CountBase extends EntityBase
59  {
60  ["cpp:const"]
61  int getCount();
62  void setCount(int count);
63  };
64  };
65  \endcode
66 
67  \li Define C++ class
68  \code
69 
70  #ifndef ARMARX_MEMORYX_CORE_COUNT_ENTITY_H_
71  #define ARMARX_MEMORYX_CORE_COUNT_ENTITY_H_
72 
73  #include <MemoryX/interface/core/EntityBase.h>
74  #include <MemoryX/interface/memorytypes/MyNewEntities.h>
75  #include <MemoryX/core/entity/Entity.h>
76 
77  // the following is required for the friend class declaration used together with private/protected constructors
78  // see http://stackoverflow.com/a/2060691
79  //
80  //namespace armarx
81  //{
82  // template <class IceBaseClass, class DerivedClass> class GenericFactory;
83  //}
84 
85  namespace memoryx
86  {
87  class Count;
88  using CountPtr = IceInternal::Handle<Count>;
89 
90  class Count :
91  public memoryx::CountBase,
92  public memoryx::Entity
93  {
94  // add this line if you want to make your constructor private/protected
95  // you also need to uncomment the namespace declaration for this to work
96  // template <class IceBaseClass, class DerivedClass> friend class armarx::GenericFactory;
97  public:
98  Count();
99  Count(const Count& source);
100  virtual ~Count();
101 
102  // cloning
103  Ice::ObjectPtr ice_clone() const;
104  CountPtr clone(const Ice::Current& c = Ice::emptyCurrent) const;
105 
106  // interface
107  Ice::Int getCount(const Ice::Current& context = Ice::emptyCurrent) const;
108  void setCount(Ice::Int count, const Ice::Current& context = Ice::emptyCurrent);
109 
110  private:
111  void output(std::ostream &stream) const;
112 
113  public:
114  // streaming operator
115  friend std::ostream &operator<<(std::ostream &stream, const Count& rhs)
116  {
117  rhs.output(stream);
118  return stream;
119  }
120 
121  friend std::ostream &operator<<(std::ostream &stream, const CountPtr& rhs)
122  {
123  rhs->output(stream);
124  return stream;
125  }
126 
127  friend std::ostream &operator<<(std::ostream &stream, const CountBasePtr& rhs)
128  {
129  stream << CountPtr::dynamicCast(rhs);
130  return stream;
131  }
132  };
133  }
134  #endif
135  \endcode
136 
137  \li implement C++ class
138  \code
139 
140  #include "Count.h"
141 
142  #include <ArmarXCore/core/system/Synchronization.h>
143 
144  namespace memoryx
145  {
146  Count::Count() :
147  Entity()
148  {
149  EntityAttributePtr countAttribute = new EntityAttribute("count");
150  putAttribute(countAttribute);
151  }
152 
153  Count::Count(const Count& source):
154  IceUtil::Shared(source),
155  ::armarx::Serializable(source),
156  EntityBase(),// dont copy
157  CountBase(source),
158  Entity(source)
159  {
160  }
161 
162  Count::~Count()
163  {
164  }
165 
166  void Count::output(std::ostream &stream) const
167  {
168  Entity::output(stream);
169  }
170 
171 
172  Ice::ObjectPtr Count::ice_clone() const
173  {
174  return this->clone();
175  }
176 
177  CountPtr Count::clone(const Ice::Current& c) const
178  {
179  boost::shared_lock<boost::shared_mutex> entityLock(entityMutex);
180  armarx::ScopedLock attributesLock(attributesMutex);
181  armarx::RecursiveMutex::scoped_lock wrappersLock(wrappersMutex);
182  CountPtr ret = new Count(*this);
183  return ret;
184  }
185 
186  Ice::Int Count::getCount(const Ice::Current& context) const
187  {
188  return getAttribute("count")->getValue()->getInt();
189  }
190 
191  void Count::setCount(Ice::Int count, const Ice::Current& context)
192  {
193  getAttribute("count")->setValue(new armarx::Variant(count));
194  }
195  }
196  \endcode
197 
198  \li add files to a library SOURCES/HEADERS variables in respective CMakeLists.txt
199 
200  \li create and register new ObjectFactory for your specialized memoryx::Entity subclass (this is required so Ice knows how to deserialize your new entity)
201  \code
202 
203  namespace ObjectFactories
204  {
205  class NewTypesObjectFactories : public armarx::FactoryCollectionBase
206  {
207  public:
208  armarx::ObjectFactoryMap getFactories()
209  {
210  armarx::ObjectFactoryMap map;
211 
212  // here be other types as well
213  // add<XBase, X>(map);
214 
215  // call template function with Ice type and C++ specific type
216  add<CountBase, Count>(map);
217 
218  return map;
219  }
220  };
221 
222  const armarx::FactoryCollectionBaseCleanUp NewTypesObjectFactoriesVar = armarx::FactoryCollectionBase::addToPreregistration(new NewTypesObjectFactories());
223  }
224  \endcode
225 
226  */
227 
228  /**
229  * \class Entity
230  *
231  * Entity is the superclass for all MemoryX memory chunks.
232  *
233  * An entity can be stored within different memory types (WorkingMemory, LTM, ...) and can be serialized to a database for persistence.
234  * Each entity is identified with an id, which is unique within a scope define by the memory processes (so it depends on the memory type and entity type).
235  * Further, each entity has a friendly name identifying its content.
236  *
237  * Entities contain an arbitrary set of attributes (see memoryx::EntityAttribute).
238  * This mechanism allows to add new attributes on the fly, without changing the declaration of the entity. Further, all subclasses of entities use
239  * this attribute mechanism to store their properties.
240  *
241  * Convenient access to the attributes can be realized by implementing a subclass off memory::AbstractAttributeWrapper. Wrappers map the attributes
242  * to c++ functions. Further extended functionality such as grid file attachement to attributes can be implemented in the wrapper.
243  * Wrappers are registered to the entity with the addWrapper() method. Only one wrapper of a specific type can be added.
244  *
245  */
246  class Entity :
247  virtual public memoryx::EntityBase
248  {
249  protected:
250  Entity(const Entity& source);
251  public:
252  /**
253  * @brief Creates an entity without any convenience getter/setter functions. This should only be used with GenericSegments (@see memoryx::MemoryInterface::addGenericSegment()).
254  *
255  */
257 
258  /**
259  * Retrieve id of this entity which is an integer in string representation. Id is unique within one memory segment and is returned by e.g. WorkingMemorySegment::addEntity()
260  * @return id as string
261  */
262  ::std::string getId(const ::Ice::Current& = Ice::emptyCurrent) const override;
263 
264  /**
265  * Set id of this entity. Id is usually set by adding the entity to a memory segment.
266  * @param id as string
267  */
268  void setId(const ::std::string& id, const ::Ice::Current& = Ice::emptyCurrent) override;
269 
270  /**
271  * Retrieve name of this entity
272  * @return name
273  */
274  ::std::string getName(const ::Ice::Current& = Ice::emptyCurrent) const override;
275 
276  /**
277  * Set name of this entity
278  * @param name
279  */
280  void setName(const ::std::string& name, const ::Ice::Current& = Ice::emptyCurrent) override;
281 
282  /**
283  * Indicates whether this entity only contains meta information
284  * @return isMetaEntity
285  */
286  bool isMetaEntity(const ::Ice::Current& = Ice::emptyCurrent) const override;
287 
288  /**
289  * Mark this entity as meta (i.e. it only contains meta information)
290  * @param isMetaEntity
291  */
292  void setMetaEntity(bool isMetaEntity, const ::Ice::Current& = Ice::emptyCurrent) override;
293 
294  /**
295  * Retrieve parent entity references
296  * @return parent entity references
297  */
298  virtual EntityRefBaseList getDirectParentRefs() const;
299 
300  /**
301  * Retrieve all parents by traversing the whole hierarchy
302  * @return all parents
303  */
304  virtual EntityRefBaseList getAllParentRefs(bool includeMetaEntities = true) const;
305 
306  virtual std::vector<std::string> getAllParentsAsStringList() const;
307 
308  /**
309  * Replace parent entity references
310  * @param entityRefs new parent entity references
311  */
312  virtual void setDirectParentRefs(const EntityRefBaseList& entityRefs);
313 
314  /**
315  * Check whether this entity has an attribute with the given name.
316  * @param attrName name of the attribute
317  * @return attribute available
318  */
319  bool hasAttribute(const ::std::string& attrName, const ::Ice::Current& = Ice::emptyCurrent) const override;
320 
321  /**
322  * Retrieve attribute from entity. If attribute is not present, a new attribute is returned. See Entity::hasAttribute()
323  * @param attrName name of the attribute
324  * @return shared pointer to attribute
325  */
326  EntityAttributeBasePtr getAttribute(const ::std::string& attrName, const ::Ice::Current& = Ice::emptyCurrent) const override;
327 
328  /**
329  * Retrieve value of an attribute from entity. If attribute is not present, a new variant is returned. See Entity::hasAttribute()
330  * @param attrName name of the attribute
331  * @return shared pointer to variant containing the value
332  */
333  virtual armarx::VariantPtr getAttributeValue(const ::std::string& attrName) const;
334 
335  /**
336  * Store attribute in entity. Name is taken from attribute member. Overwrites attribute with the same name if present.
337  *
338  * @param attr pointer to attribute
339  */
340  void putAttribute(const ::memoryx::EntityAttributeBasePtr& attr, const ::Ice::Current& = Ice::emptyCurrent) override;
341 
342  /**
343  * Create and store attribute from name, value, and optionally uncertainty measure. Overwrites attribute with the same name if present.
344  *
345  * @param attrName name of the attribute
346  * @param attrValue value of the attribute
347  * @param uncertainty probability measure
348  */
349  template<typename T>
350  void putAttribute(const std::string& attrName, T attrValue,
351  ProbabilityMeasureBasePtr uncertainty = ProbabilityMeasureBasePtr())
352  {
353  const ::memoryx::EntityAttributeBasePtr attr = new EntityAttribute(attrName);
354  attr->setValueWithUncertainty(armarx::VariantPtr(new armarx::Variant(attrValue)), uncertainty);
355 
356  putAttribute(attr);
357  }
358 
359  /**
360  * Remove attribute with given name from entity.
361  *
362  * @param attrName name of the attribute
363  */
364  void removeAttribute(const ::std::string& attrName, const ::Ice::Current& = Ice::emptyCurrent) override;
365 
366  /**
367  * Retrieve list of all attribute names
368  *
369  * @return list of names
370  */
371  memoryx::NameList getAttributeNames(const ::Ice::Current& = Ice::emptyCurrent) const override;
372 
373  /**
374  * @brief equals computes if two Entity instances are equal.
375  * Attributes of both Entities in the order Id, name, and attributes have to match in order to be considered equal.
376  *
377  * @see Entity::equalsAttributes
378  *
379  * @param otherEntity the Entity to compare with
380  * @return true if both entities are equal, false otherise
381  */
382  bool equals(const EntityBasePtr& otherEntity, const ::Ice::Current& = Ice::emptyCurrent) const override;
383 
384  /**
385  * @brief equalsAttributes computes if two Entity instances are equal.
386  * Attributes of both Entities in the order name and attributes have to match in order to be considered equal.
387  *
388  * @see Entity::equals
389  *
390  * @param otherEntity the Entity to compare with
391  * @return true if both entities are equal, false otherise
392  */
393  bool equalsAttributes(const EntityBasePtr& otherEntity, const ::Ice::Current& = Ice::emptyCurrent) const override;
394 
395  /**
396  * Add EntityWrapper to entity. EntityWrapper provide a specific view on the entity and allow convenient c++ style access to the
397  * attributes of the entity. They can also handle associated files. See e.g. EntityWrappers::SimoxObjectWrapper
398  *
399  * Example:
400  *
401  * SimoxObjectWrapperPtr simoxWrapper = entity->addWrapper(new SimoxObjectWrapper(...));
402  * ManipulationObjectPtr mo = simoxWrapper->getManipulationObject();
403  *
404  *
405  * @param pointer to wrapper
406  */
407  template<typename T>
409  {
410  static_assert(!std::is_same_v<T, EntityWrappers::AbstractEntityWrapper>,
411  "The template parameter for Entity::addWrapper should not be of base class AbstractEntityWrapper");
412 
413  static_assert(!std::is_base_of_v<T, EntityWrappers::AbstractEntityWrapper>,
414  "The template parameter for Entity::addWrapper needs to inherit from AbstractEntityWrapper");
415 
416  IceInternal::Handle<T> result = getWrapper<T>();
417 
418  if (!result)
419  {
420  wrapper->setEntity(this);
421  std::scoped_lock lock(wrappersMutex);
422  wrappers.push_back(wrapper);
423  return wrapper;
424  }
425 
426  return result;
427  }
428 
429 
430  /**
431  * Retrieve EntityWrapper that has previously been added with Entity::addWrapper().
432  * @see addWrapper
433  *
434  * @return NULL if no wrapper of type T
435  */
436  template<typename T>
438  {
439  static_assert(!std::is_same_v<T, EntityWrappers::AbstractEntityWrapper>,
440  "The template parameter for Entity::getWrapper should not be of base class AbstractEntityWrapper");
441 
442  static_assert(!std::is_base_of_v<T, EntityWrappers::AbstractEntityWrapper>,
443  "The template parameter for Entity::getWrapper needs to inherit from AbstractEntityWrapper");
444  std::scoped_lock lock(wrappersMutex);
445  AbstractEntityWrapperBaseList::iterator iter = wrappers.begin();
446 
447  while (iter != wrappers.end())
448  {
450 
451  if (h)
452  {
453  return h;
454  }
455 
456  iter++;
457  }
458 
459  // ARMARX_ERROR_S << "No Wrapper found - " << wrappers.size() << " in list";
460  return NULL;
461  }
462 
463  // cloning
464  Ice::ObjectPtr ice_clone() const override;
465  EntityPtr clone(const Ice::Current& c = Ice::emptyCurrent) const;
466 
467  /**
468  * Subclasses should use serializable attributes and consider these methods final.
469  *
470  * Exemplary JSON serialization:
471  * \code
472  EntityPtr entity = new Entity;
473  armarx::JSONObjectPtr jsonSerializer = new armarx::JSONObject;
474  entity->serialize(jsonSerializer);
475  ARMARX_ERROR << "Entity: " << jsonSerializer->asString(true);
476  * \endcode
477  */
478  void serialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = Ice::emptyCurrent) const override;
479 
480  /**
481  * Subclasses should use serializable attributes and consider these methods final.
482  *
483  * Exemplary JSON deserialization:
484  * \code
485  EntityPtr entity = new EntityPtr;
486  armarx::JSONObjectPtr jsonSerializer = new armarx::JSONObject(getIceManager()->getCommunicator());
487  jsonSerializer->fromString(json);
488  entity->deserialize(jsonSerializer);
489  * \endcode
490  */
491  void deserialize(const armarx::ObjectSerializerBasePtr& serializer, const ::Ice::Current& = Ice::emptyCurrent) override;
492 
493 
494  protected:
495  template <class BaseClass, class VariantClass>
497 
498  Entity() {}
499  ~Entity() override; // only shared pointers allowed
500  void output(std::ostream& stream) const;
501 
502  AbstractEntityWrapperBaseList wrappers;
503 
504  mutable std::mutex attributesMutex;
505  mutable std::shared_mutex entityMutex;
506  mutable std::recursive_mutex wrappersMutex;
507 
508  void ice_preMarshal() override;
509  void ice_postUnmarshal() override;
510  private:
511  /**
512  * This copies the content of the entity and clones at its pointers.
513  * @see Entity(const Entity& source)
514  */
515  void deepCopy(const Entity& source);
516  public: // streaming operator
517  friend std::ostream& operator<<(std::ostream& stream, const Entity& rhs)
518  {
519  rhs.output(stream);
520  return stream;
521  }
522 
523  friend std::ostream& operator<<(std::ostream& stream, const EntityPtr& rhs)
524  {
525  rhs->output(stream);
526  return stream;
527  }
528 
529  friend std::ostream& operator<<(std::ostream& stream, const EntityBasePtr& rhs)
530  {
531  stream << EntityPtr::dynamicCast(rhs);
532  return stream;
533  }
534 
535  // // Shared interface
536  public:
537  void __decRef() override;
538  };
539 
540 }
memoryx::Entity::ice_preMarshal
void ice_preMarshal() override
Definition: Entity.cpp:421
memoryx::Entity::setMetaEntity
void setMetaEntity(bool isMetaEntity, const ::Ice::Current &=Ice::emptyCurrent) override
Mark this entity as meta (i.e.
Definition: Entity.cpp:196
armarx::Variant
The Variant class is described here: Variants.
Definition: Variant.h:224
armarx::VariantType::EntityRef
const armarx::VariantTypeId EntityRef
Definition: EntityRef.h:30
memoryx::Entity::putAttribute
void putAttribute(const std::string &attrName, T attrValue, ProbabilityMeasureBasePtr uncertainty=ProbabilityMeasureBasePtr())
Create and store attribute from name, value, and optionally uncertainty measure.
Definition: Entity.h:350
memoryx::Entity::putAttribute
void putAttribute(const ::memoryx::EntityAttributeBasePtr &attr, const ::Ice::Current &=Ice::emptyCurrent) override
Store attribute in entity.
Definition: Entity.cpp:327
memoryx::Entity::getName
::std::string getName(const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve name of this entity.
Definition: Entity.cpp:173
memoryx::Entity::getId
::std::string getId(const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve id of this entity which is an integer in string representation.
Definition: Entity.cpp:161
memoryx::Entity::deserialize
void deserialize(const armarx::ObjectSerializerBasePtr &serializer, const ::Ice::Current &=Ice::emptyCurrent) override
Subclasses should use serializable attributes and consider these methods final.
Definition: Entity.cpp:470
memoryx::Entity::getAttribute
EntityAttributeBasePtr getAttribute(const ::std::string &attrName, const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve attribute from entity.
Definition: Entity.cpp:293
memoryx::Entity::Entity
Entity()
Definition: Entity.h:498
memoryx::Entity::removeAttribute
void removeAttribute(const ::std::string &attrName, const ::Ice::Current &=Ice::emptyCurrent) override
Remove attribute with given name from entity.
Definition: Entity.cpp:333
memoryx::Entity::~Entity
~Entity() override
Definition: Entity.cpp:142
memoryx::Entity::clone
EntityPtr clone(const Ice::Current &c=Ice::emptyCurrent) const
Definition: Entity.cpp:402
memoryx::Entity::serialize
void serialize(const armarx::ObjectSerializerBasePtr &serializer, const ::Ice::Current &=Ice::emptyCurrent) const override
Subclasses should use serializable attributes and consider these methods final.
Definition: Entity.cpp:441
memoryx
VirtualRobot headers.
Definition: CommonPlacesTester.cpp:48
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:43
memoryx::Entity::getAttributeNames
memoryx::NameList getAttributeNames(const ::Ice::Current &=Ice::emptyCurrent) const override
Retrieve list of all attribute names.
Definition: Entity.cpp:346
memoryx::Entity::CreateGenericEntity
static EntityPtr CreateGenericEntity()
Creates an entity without any convenience getter/setter functions.
Definition: Entity.cpp:42
memoryx::Entity::operator<<
friend std::ostream & operator<<(std::ostream &stream, const EntityBasePtr &rhs)
Definition: Entity.h:529
memoryx::Entity::ice_postUnmarshal
void ice_postUnmarshal() override
Definition: Entity.cpp:433
memoryx::Entity::output
void output(std::ostream &stream) const
Definition: Entity.cpp:409
memoryx::Entity::getAttributeValue
virtual armarx::VariantPtr getAttributeValue(const ::std::string &attrName) const
Retrieve value of an attribute from entity.
Definition: Entity.cpp:308
memoryx::Entity::operator<<
friend std::ostream & operator<<(std::ostream &stream, const EntityPtr &rhs)
Definition: Entity.h:523
IceInternal::Handle
Definition: forward_declarations.h:8
memoryx::Entity::setDirectParentRefs
virtual void setDirectParentRefs(const EntityRefBaseList &entityRefs)
Replace parent entity references.
Definition: Entity.cpp:276
memoryx::Entity::ice_clone
Ice::ObjectPtr ice_clone() const override
Definition: Entity.cpp:397
EntityAttribute.h
memoryx::Entity::getWrapper
IceInternal::Handle< T > getWrapper()
Retrieve EntityWrapper that has previously been added with Entity::addWrapper().
Definition: Entity.h:437
memoryx::Entity::getDirectParentRefs
virtual EntityRefBaseList getDirectParentRefs() const
Retrieve parent entity references.
Definition: Entity.cpp:208
memoryx::Entity::attributesMutex
std::mutex attributesMutex
Definition: Entity.h:504
memoryx::Entity::addWrapper
IceInternal::Handle< T > addWrapper(T *wrapper)
Add EntityWrapper to entity.
Definition: Entity.h:408
memoryx::Entity::__decRef
void __decRef() override
Definition: Entity.cpp:91
memoryx::Entity::getAllParentsAsStringList
virtual std::vector< std::string > getAllParentsAsStringList() const
Definition: Entity.cpp:264
AbstractEntityWrapper.h
memoryx::Entity::getAllParentRefs
virtual EntityRefBaseList getAllParentRefs(bool includeMetaEntities=true) const
Retrieve all parents by traversing the whole hierarchy.
Definition: Entity.cpp:227
boost::source
Vertex source(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:681
memoryx::Entity::setId
void setId(const ::std::string &id, const ::Ice::Current &=Ice::emptyCurrent) override
Set id of this entity.
Definition: Entity.cpp:167
memoryx::Entity::wrappers
AbstractEntityWrapperBaseList wrappers
Definition: Entity.h:502
memoryx::Entity::equalsAttributes
bool equalsAttributes(const EntityBasePtr &otherEntity, const ::Ice::Current &=Ice::emptyCurrent) const override
equalsAttributes computes if two Entity instances are equal.
Definition: Entity.cpp:369
memoryx::Entity::entityMutex
std::shared_mutex entityMutex
Definition: Entity.h:505
memoryx::Entity::hasAttribute
bool hasAttribute(const ::std::string &attrName, const ::Ice::Current &=Ice::emptyCurrent) const override
Check whether this entity has an attribute with the given name.
Definition: Entity.cpp:339
memoryx::Entity::operator<<
friend std::ostream & operator<<(std::ostream &stream, const Entity &rhs)
Definition: Entity.h:517
memoryx::EntityAttribute
Attribute of MemoryX entities.
Definition: EntityAttribute.h:48
armarx::GenericFactory
Definition: FactoryCollectionBase.h:51
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
T
float T
Definition: UnscentedKalmanFilterTest.cpp:35
memoryx::Entity
Definition: Entity.h:246
memoryx::Entity::equals
bool equals(const EntityBasePtr &otherEntity, const ::Ice::Current &=Ice::emptyCurrent) const override
equals computes if two Entity instances are equal.
Definition: Entity.cpp:360
Variant.h
memoryx::Entity::setName
void setName(const ::std::string &name, const ::Ice::Current &=Ice::emptyCurrent) override
Set name of this entity.
Definition: Entity.cpp:179
memoryx::Entity::wrappersMutex
std::recursive_mutex wrappersMutex
Definition: Entity.h:506
memoryx::Entity::isMetaEntity
bool isMetaEntity(const ::Ice::Current &=Ice::emptyCurrent) const override
Indicates whether this entity only contains meta information.
Definition: Entity.cpp:185