[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