[Orxonox-commit 1057] r5777 - code/branches/core5/src/libraries/core
landauf at orxonox.net
landauf at orxonox.net
Thu Sep 24 00:15:20 CEST 2009
Author: landauf
Date: 2009-09-24 00:15:20 +0200 (Thu, 24 Sep 2009)
New Revision: 5777
Modified:
code/branches/core5/src/libraries/core/ClassFactory.h
code/branches/core5/src/libraries/core/CoreIncludes.h
code/branches/core5/src/libraries/core/Factory.h
code/branches/core5/src/libraries/core/Identifier.cc
code/branches/core5/src/libraries/core/SubclassIdentifier.h
Log:
simplified ClassFactory creation
fixed typo in Factory
Modified: code/branches/core5/src/libraries/core/ClassFactory.h
===================================================================
--- code/branches/core5/src/libraries/core/ClassFactory.h 2009-09-23 21:47:13 UTC (rev 5776)
+++ code/branches/core5/src/libraries/core/ClassFactory.h 2009-09-23 22:15:20 UTC (rev 5777)
@@ -53,8 +53,8 @@
class _CoreExport BaseFactory
{
public:
- virtual BaseObject* fabricate(BaseObject* creator) = 0;
virtual ~BaseFactory() {};
+ virtual BaseObject* fabricate(BaseObject* creator) = 0;
};
// ###############################
@@ -65,15 +65,8 @@
class ClassFactory : public BaseFactory
{
public:
- static bool create(const std::string& name, bool bLoadable = true);
+ ClassFactory(const std::string& name, bool bLoadable = true);
BaseObject* fabricate(BaseObject* creator);
-
- private:
- ClassFactory() {} // Don't create
- ClassFactory(const ClassFactory& factory) {} // Don't copy
- virtual ~ClassFactory() {} // Don't delete
-
- static T* createNewObject(BaseObject* creator);
};
/**
@@ -83,14 +76,12 @@
@return Always true (this is needed because the compiler only allows assignments before main())
*/
template <class T>
- bool ClassFactory<T>::create(const std::string& name, bool bLoadable)
+ ClassFactory<T>::ClassFactory(const std::string& name, bool bLoadable)
{
COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl;
- ClassIdentifier<T>::getIdentifier(name)->addFactory(new ClassFactory<T>);
+ ClassIdentifier<T>::getIdentifier(name)->addFactory(this);
ClassIdentifier<T>::getIdentifier()->setLoadable(bLoadable);
Factory::add(name, ClassIdentifier<T>::getIdentifier());
-
- return true;
}
/**
@@ -100,18 +91,8 @@
template <class T>
inline BaseObject* ClassFactory<T>::fabricate(BaseObject* creator)
{
- return ClassFactory<T>::createNewObject(creator);
+ return static_cast<BaseObject*>(new T(creator));
}
-
- /**
- @brief Creates and returns a new object of class T; this is a wrapper for the new operator.
- @return The new object
- */
- template <class T>
- inline T* ClassFactory<T>::createNewObject(BaseObject* creator)
- {
- return new T(creator);
- }
}
#endif /* _ClassFactory_H__ */
Modified: code/branches/core5/src/libraries/core/CoreIncludes.h
===================================================================
--- code/branches/core5/src/libraries/core/CoreIncludes.h 2009-09-23 21:47:13 UTC (rev 5776)
+++ code/branches/core5/src/libraries/core/CoreIncludes.h 2009-09-23 22:15:20 UTC (rev 5777)
@@ -80,14 +80,14 @@
@param ClassName The name of the class
*/
#define CreateFactory(ClassName) \
- bool bCreated##ClassName##Factory = orxonox::ClassFactory<ClassName>::create(#ClassName, true)
+ BaseFactory* ClassName##Factory = new orxonox::ClassFactory<ClassName>(#ClassName, true)
/**
@brief Creates the entry in the Factory for classes which should not be loaded through XML.
@param ClassName The name of the class
*/
#define CreateUnloadableFactory(ClassName) \
- bool bCreated##ClassName##Factory = orxonox::ClassFactory<ClassName>::create(#ClassName, false)
+ BaseFactory* ClassName##Factory = new orxonox::ClassFactory<ClassName>(#ClassName, false)
/**
@brief Returns the Identifier of the given class.
Modified: code/branches/core5/src/libraries/core/Factory.h
===================================================================
--- code/branches/core5/src/libraries/core/Factory.h 2009-09-23 21:47:13 UTC (rev 5776)
+++ code/branches/core5/src/libraries/core/Factory.h 2009-09-23 22:15:20 UTC (rev 5777)
@@ -68,7 +68,7 @@
static Factory* getFactoryPointer(); // avoid overriding order problem in the static intialisation process
/** @brief Returns the factory-map. */
- static const std::map<std::string, Identifier*>& getFacbtoryMap()
+ static const std::map<std::string, Identifier*>& getFactoryMap()
{ return Factory::getFactoryPointer()->identifierStringMap_; }
/** @brief Returns the begin-iterator of the factory-map. */
static std::map<std::string, Identifier*>::const_iterator getFactoryMapBegin()
Modified: code/branches/core5/src/libraries/core/Identifier.cc
===================================================================
--- code/branches/core5/src/libraries/core/Identifier.cc 2009-09-23 21:47:13 UTC (rev 5776)
+++ code/branches/core5/src/libraries/core/Identifier.cc 2009-09-23 22:15:20 UTC (rev 5777)
@@ -234,7 +234,7 @@
COUT(1) << "Error: Cannot fabricate an object of type '" << this->name_ << "'. Class has no factory." << std::endl;
COUT(1) << "Aborting..." << std::endl;
abort();
- return NULL;
+ return 0;
}
}
Modified: code/branches/core5/src/libraries/core/SubclassIdentifier.h
===================================================================
--- code/branches/core5/src/libraries/core/SubclassIdentifier.h 2009-09-23 21:47:13 UTC (rev 5776)
+++ code/branches/core5/src/libraries/core/SubclassIdentifier.h 2009-09-23 22:15:20 UTC (rev 5777)
@@ -173,7 +173,8 @@
COUT(1) << "Error: Couldn't fabricate a new Object - Identifier is undefined." << std::endl;
}
- assert(false);
+ COUT(1) << "Aborting..." << std::endl;
+ abort();
return 0;
}
}
More information about the Orxonox-commit
mailing list