[Orxonox-commit 1705] r6423 - code/trunk/src/libraries/core
rgrieder at orxonox.net
rgrieder at orxonox.net
Sun Dec 27 00:09:09 CET 2009
Author: rgrieder
Date: 2009-12-27 00:09:08 +0100 (Sun, 27 Dec 2009)
New Revision: 6423
Modified:
code/trunk/src/libraries/core/ConfigValueIncludes.h
code/trunk/src/libraries/core/CoreIncludes.h
Log:
Fixed bug that caused derived classes to list the base class's config values as well.
Introduced a new "ClassByObjecType" function that accepts a 'this' pointer and returns the correct identifier (not this->getIdentifier()!).
Modified: code/trunk/src/libraries/core/ConfigValueIncludes.h
===================================================================
--- code/trunk/src/libraries/core/ConfigValueIncludes.h 2009-12-26 10:18:13 UTC (rev 6422)
+++ code/trunk/src/libraries/core/ConfigValueIncludes.h 2009-12-26 23:09:08 UTC (rev 6423)
@@ -62,11 +62,11 @@
template <class T, class D, class V>
inline ConfigValueContainer& setConfigValueGeneric(T* object, V* variable, ConfigFileType type, const std::string& sectionName, const std::string& entryName, const D& defaultValue)
{
- ConfigValueContainer* container = object->getIdentifier()->getConfigValueContainer(entryName);
+ ConfigValueContainer* container = ClassIdentifier<T>::getIdentifier()->getConfigValueContainer(entryName);
if (!container)
{
- container = new ConfigValueContainer(type, object->getIdentifier(), sectionName, entryName, defaultValue, *variable);
- object->getIdentifier()->addConfigValueContainer(entryName, container);
+ container = new ConfigValueContainer(type, ClassIdentifier<T>::getIdentifier(), sectionName, entryName, defaultValue, *variable);
+ ClassIdentifier<T>::getIdentifier()->addConfigValueContainer(entryName, container);
}
return container->getValue(variable, object);
}
@@ -112,7 +112,7 @@
template <class T, class V>
inline void resetConfigValueGeneric(T* object, V* variable, const std::string& entryName)
{
- ConfigValueContainer* container = object->getIdentifier()->getConfigValueContainer(entryName);
+ ConfigValueContainer* container = ClassIdentifier<T>::getIdentifier()->getConfigValueContainer(entryName);
if (container)
{
container->reset();
@@ -121,7 +121,7 @@
else
{
COUT(2) << "Warning: Couldn't reset config-value '" << entryName << "' in class '"
- << object->getIdentifier()->getName() << "', corresponding container doesn't exist." << std::endl;
+ << ClassIdentifier<T>::getIdentifier()->getName() << "', corresponding container doesn't exist." << std::endl;
}
}
}
@@ -151,7 +151,7 @@
Arguments for the modifier function
*/
#define ModifyConfigValueGeneric(object, variable, entryName, modifier, ...) \
- if (orxonox::ConfigValueContainer* container = object->getIdentifier()->getConfigValueContainer(entryName)) \
+ if (orxonox::ConfigValueContainer* container = ClassByObjectType(object)->getConfigValueContainer(entryName)) \
{ \
container->modifier(__VA_ARGS__); \
container->getValue(variable, object); \
@@ -159,7 +159,7 @@
else \
{ \
COUT(2) << "Warning: Couln't modify config-value '" << entryName << "' in class '" \
- << object->getIdentifier()->getName() << "', corresponding container doesn't exist." << std::endl; \
+ << ClassByObjectType(object)->getName() << "', corresponding container doesn't exist." << std::endl; \
}
/** Modifies a runtime configurable value by using a modifier and some arguments.
Modified: code/trunk/src/libraries/core/CoreIncludes.h
===================================================================
--- code/trunk/src/libraries/core/CoreIncludes.h 2009-12-26 10:18:13 UTC (rev 6422)
+++ code/trunk/src/libraries/core/CoreIncludes.h 2009-12-26 23:09:08 UTC (rev 6423)
@@ -124,6 +124,18 @@
{
return Identifier::getIdentifierByID(id);
}
+
+ /**
+ @brief Returns the Identifier with a given 'this' pointer.
+ @note This of course only works with OrxonoxClasses.
+ The only use is in conjunction with macros that don't know the class type.
+ @param Pointer to an OrxonoxClass
+ */
+ template <class T>
+ inline Identifier* ClassByObjectType(const T* object)
+ {
+ return ClassIdentifier<T>::getIdentifier();
+ }
}
#endif /* _CoreIncludes_H__ */
More information about the Orxonox-commit
mailing list