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