71 #ifndef _Identifier_H__ 72 #define _Identifier_H__ 130 virtual const std::type_info& getTypeInfo() = 0;
134 void setNetworkID(uint32_t
id);
140 inline bool hasFactory()
const {
return (this->factory_ !=
nullptr); }
150 inline void setVirtualBase(
bool bIsVirtualBase) { this->bIsVirtualBase_ = bIsVirtualBase; }
155 virtual void destroyObjects() = 0;
157 virtual bool canDynamicCastObjectToIdentifierClass(
Identifiable*
object)
const = 0;
167 void initializeParents(
const std::list<const Identifier*>& initializationTrace);
168 void finishInitialization();
172 bool isExactlyA(
const Identifier* identifier)
const;
173 bool isChildOf(
const Identifier* identifier)
const;
174 bool isDirectChildOf(
const Identifier* identifier)
const;
175 bool isParentOf(
const Identifier* identifier)
const;
176 bool isDirectParentOf(
const Identifier* identifier)
const;
179 inline const std::list<const Identifier*>&
getDirectParents()
const {
return this->directParents_; }
181 inline const std::list<const Identifier*>&
getParents()
const {
return this->parents_; }
184 inline const std::set<const Identifier*>&
getDirectChildren()
const {
return this->directChildren_; }
186 inline const std::set<const Identifier*>&
getChildren()
const {
return this->children_; }
192 virtual void updateConfigValues(
bool updateChildren =
true)
const = 0;
205 inline const std::map<std::string, XMLPortParamContainer*>&
getXMLPortParamMap()
const {
return this->xmlportParamContainers_; }
208 inline const std::map<std::string, XMLPortObjectContainer*>&
getXMLPortObjectMap()
const {
return this->xmlportObjectContainers_; }
217 virtual void createSuperFunctionCaller()
const = 0;
220 void verifyIdentifierTrace()
const;
221 void addIfNotExists(std::list<const Identifier*>& list,
const Identifier* identifierToAdd)
const;
245 _CoreExport std::ostream& operator<<(std::ostream& out, const std::set<const Identifier*>& list);
264 static_assert(std::is_base_of<Identifiable, T>::value,
"ClassIdentifier can only be used with Identifiables");
266 #ifndef DOXYGEN_SHOULD_SKIP_THIS 267 #define SUPER_INTRUSIVE_DECLARATION_INCLUDE 284 bool initializeObject(
T*
object);
286 virtual void updateConfigValues(
bool updateChildren =
true)
const override;
289 {
return typeid(
T); }
292 {
return dynamic_cast<T*
>(object) !=
nullptr; }
294 virtual void destroyObjects()
override;
306 void addObjectToList(
T*
object,
Listable*);
310 void destroyObjects(
void*);
313 void destroyObject(
void*
object);
315 void updateConfigValues(
bool updateChildren,
Listable*)
const;
316 void updateConfigValues(
bool updateChildren,
Identifiable*)
const;
331 if (ClassIdentifier<T>::classIdentifier_s ==
nullptr)
334 OrxVerify(ClassIdentifier<T>::classIdentifier_s !=
nullptr,
"Did you forget to register the class of type " <<
typeid(
T).name() <<
"?");
335 return ClassIdentifier<T>::classIdentifier_s;
345 orxout(
verbose, context::object_list) <<
"Register Object: " << this->getName() << endl;
347 object->identifier_ =
this;
353 this->setConfigValues(
object,
object);
359 this->addObjectToList(
object,
object);
362 object->objectPointers_.emplace_back(this->getClassID(), static_cast<void*>(
object));
373 object->setConfigValues();
405 this->destroyObjects((
T*)
nullptr);
416 this->destroyObject(*(it++));
446 this->updateConfigValues(updateChildren, static_cast<T*>(
nullptr));
452 if (!this->hasConfigValues())
456 this->setConfigValues(
object,
object);
459 for (
const Identifier* child : this->getChildren())
460 child->updateConfigValues(
false);
484 template <
class T,
class U>
487 #ifdef ORXONOX_COMPILER_MSVC 489 if (source !=
nullptr)
494 return dynamic_cast<T>(
source);
static void destroy(ClassIdentifier< T > *)
Definition: Super.h:321
The ClassIdentifier is derived from Identifier and holds all class-specific functions and variables t...
Definition: Identifier.h:262
The ConfigValuecontainer contains all needed information about a configurable variable.
Definition: ConfigValueContainer.h:98
void source(const std::string &filename)
Reads the content of a file and executes the commands in it line by line.
Definition: ConsoleCommandCompilation.cc:167
Definition: XMLPort.h:323
bool bHasConfigValues_
True if this class has at least one assigned config value.
Definition: Identifier.h:238
static WeakPtr< ClassIdentifier< T > > classIdentifier_s
Definition: Identifier.h:318
static void initialize(ClassIdentifier< T > *)
Definition: Super.h:312
ObjectListIterator< T > begin()
Returns an Iterator to the first element in the list.
Definition: ObjectList.h:82
void destroyObject(Destroyable *object)
Call 'object->destroy()' for Destroyables and 'delete object' for all other types.
Definition: Identifier.h:429
std::map< std::string, ConfigValueContainer * > configValues_
A map to link the string of configurable variables with their ConfigValueContainer.
Definition: Identifier.h:239
Listable stores the entries of all object lists pointing to this instance.
Definition: Listable.h:50
ClassIdentifier(const std::string &name, Factory *factory, bool bLoadable)
Definition: Identifier.h:272
bool bIsVirtualBase_
If true, it is recommended to inherit virtually from this class. This changes the order of initializa...
Definition: Identifier.h:232
Shared library macros, enums, constants and forward declarations for the core library ...
::std::string string
Definition: gtest-port.h:756
bool isLoadable() const
Returns true if the class can be loaded through XML.
Definition: Identifier.h:145
uint32_t networkID_
The network ID to identify a class through the network.
Definition: Identifier.h:235
virtual bool canDynamicCastObjectToIdentifierClass(Identifiable *object) const override
Definition: Identifier.h:291
Output level, usually not visible, used for unimportant debug information.
Definition: OutputDefinitions.h:99
virtual const std::type_info & getTypeInfo() override
Returns the type_info of the class as it is returned by typeid(T)
Definition: Identifier.h:288
helper class to manually define inheritance
Definition: Identifier.h:112
void setConfigValues(T *object, Configurable *) const
Only configures the object if is a Configurable.
Definition: Identifier.h:371
void setVirtualBase(bool bIsVirtualBase)
Defines if child classes should inherit virtually from this class.
Definition: Identifier.h:150
Definition of WeakPtr<T>, wraps a pointer to an object.
virtual ~InheritsFrom()
Definition: Identifier.h:114
WeakPtr wraps a pointer to an object, which becomes nullptr if the object is deleted.
Definition: CorePrereqs.h:236
Identifiable is needed to create the class-hierarchy at startup and to store the Identifier.
Definition: Identifiable.h:50
This is the base class of all objects which may contain config values.
Definition: Configurable.h:47
unsigned int classID_
Uniquely identifies a class (might not be the same as the networkID_)
Definition: Identifier.h:236
std::map< std::string, XMLPortParamContainer * > xmlportParamContainers_
All loadable parameters.
Definition: Identifier.h:241
bool hasConfigValues() const
Returns true if this class has at least one config value.
Definition: Identifier.h:195
~ClassIdentifier()
Definition: Identifier.h:279
std::map< std::string, XMLPortObjectContainer * > xmlportObjectContainers_
All attachable objects.
Definition: Identifier.h:242
void createdObject(Identifiable *identifiable)
Notifies the IdentifierManager about a newly created object while creating the class hierarchy...
Definition: IdentifierManager.cc:194
std::list< const InheritsFrom * > manualDirectParents_
Manually defined direct parents.
Definition: Identifier.h:223
void addObjectToList(T *object, Listable *)
Only adds the object to the object list if is a Listable.
Definition: Identifier.h:386
static ClassIdentifier< T > * getIdentifier()
Returns the only instance of this class.
Definition: Identifier.h:329
Definition: XMLPort.h:504
std::list< const Identifier * > parents_
The parents of the class the Identifier belongs to (sorted by their order of initialization) ...
Definition: Identifier.h:225
static bool initConfigValues_s
Definition: Identifier.h:159
const std::map< std::string, XMLPortObjectContainer * > & getXMLPortObjectMap() const
Returns the map that stores all XMLPort objects.
Definition: Identifier.h:208
const std::map< std::string, XMLPortParamContainer * > & getXMLPortParamMap() const
Returns the map that stores all XMLPort params.
Definition: Identifier.h:205
const std::set< const Identifier * > & getChildren() const
Returns the children of the class the Identifier belongs to.
Definition: Identifier.h:186
Identifier * getIdentifierByTypeInfo(const std::type_info &typeInfo)
Returns the Identifier with a given typeid-name.
Definition: IdentifierManager.cc:260
static Context * getRootContext()
Definition: Context.cc:87
bool isVirtualBase() const
Returns true if child classes should inherit virtually from this class.
Definition: Identifier.h:148
bool hasFactory() const
Returns true if the Identifier has a Factory.
Definition: Identifier.h:140
Factory * factory_
The Factory, able to create new objects of the given class (if available)
Definition: Identifier.h:234
bool bLoadable_
False = it's not permitted to load the object through XML.
Definition: Identifier.h:231
Definition: TypeTraits.h:165
OutputStream & orxout(OutputLevel level=level::debug_output, const OutputContextContainer &context=context::undefined())
This helper function returns a reference to a commonly used instance of OutputStream.
Definition: Output.h:81
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
bool bInitialized_
Is true if the Identifier was completely initialized.
Definition: Identifier.h:230
const std::list< const Identifier * > & getDirectParents() const
Returns the direct parents of the class the Identifier belongs to.
Definition: Identifier.h:179
virtual void destroyObjects() override
Destroy all objects of this class (must be Listable).
Definition: Identifier.h:403
#define _CoreExport
Definition: CorePrereqs.h:61
const std::list< const Identifier * > & getParents() const
Returns the parents of the class the Identifier belongs to.
Definition: Identifier.h:181
std::string name_
The name of the class the Identifier belongs to.
Definition: Identifier.h:233
std::list< const Identifier * > directParents_
The direct parents of the class the Identifier belongs to (sorted by their order of initialization) ...
Definition: Identifier.h:224
The Identifier is used to identify the class of an object and to store information about the class...
Definition: Identifier.h:109
Declaration of Destroyable, the base class of all objects which can be used with StrongPtr and WeakPt...
Defines the helper function orxout() and includes all necessary headers to use the output system...
ORX_FORCEINLINE T orxonox_cast(U *source)
Casts on object of type Identifiable to any derived type that is registered in the class hierarchy...
Definition: Identifier.h:485
ObjectListIterator< T > end()
Returns an Iterator to the element after the last element in the list.
Definition: ObjectList.h:85
Definition: InputPrereqs.h:78
The ObjectList contains all objects of the given class.
Definition: CorePrereqs.h:204
bool initializeObject(T *object)
Adds an object of the given type to the ObjectList.
Definition: Identifier.h:343
Definition of the ObjectList class, a wrapper of ObjectListBase.
Declaration of Listable, the base of all classes whose instances can be stored in object lists...
Context * getContext() const
Definition: Listable.h:62
std::set< const Identifier * > directChildren_
The direct children of the class the Identifier belongs to.
Definition: Identifier.h:227
std::set< const Identifier * > children_
The children of the class the Identifier belongs to.
Definition: Identifier.h:228
Classes must inherit from this class if they should be used with StrongPtr or WeakPtr.
Definition: Destroyable.h:47
uint32_t getNetworkID() const
Returns the network ID to identify a class through the network.
Definition: Identifier.h:133
virtual void updateConfigValues(bool updateChildren=true) const override
Updates the config-values of all existing objects of this class by calling their setConfigValues() fu...
Definition: Identifier.h:444
#define ORX_FORCEINLINE
Definition: OrxonoxConfig.h:95
const std::string & getName() const
Returns the name of the class the Identifier belongs to.
Definition: Identifier.h:127
Definition of all super-function related macros, used to call functions of the base class...
bool isInitialized() const
Returns true if the Identifier was completely initialized.
Definition: Identifier.h:153
#define OrxVerify(condition, errorMessage)
Works like OrxAssert in debug mode, but also checks the condition in release mode (no abort() trigger...
Definition: OrxAssert.h:78
internal::String name_
Definition: gtest.cc:2289
static IdentifierManager & getInstance()
Returns a reference to the singleton instance.
Definition: Singleton.h:118
Definition: InputPrereqs.h:80
Base-class of all factories.
Definition: ClassFactory.h:52
ORX_FORCEINLINE unsigned int getClassID() const
Returns the unique ID of the class.
Definition: Identifier.h:137
const std::set< const Identifier * > & getDirectChildren() const
Returns the direct children the class the Identifier belongs to.
Definition: Identifier.h:184
ObjectListIterator<T> allows to iterate through the ObjectList of class T.
Definition: CorePrereqs.h:210
Declaration of custom assertion facilities
void addObject(T *object)
Definition: Context.h:65