Changeset 5610 for code/branches/resource2/src/core
- Timestamp:
- Aug 5, 2009, 5:15:35 PM (15 years ago)
- Location:
- code/branches/resource2/src/core
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/resource2/src/core/ClassFactory.h
r3196 r5610 54 54 class ClassFactory : public BaseFactory 55 55 { 56 friend class Factory; 57 56 58 public: 57 59 static bool create(const std::string& name, bool bLoadable = true); … … 59 61 60 62 private: 61 ClassFactory( ) {} // Don't create62 ClassFactory(const ClassFactory& factory) {}// Don't copy63 ClassFactory(bool bLoadable) : bLoadable_(bLoadable) {} 64 ClassFactory(const ClassFactory& factory); // Don't copy 63 65 virtual ~ClassFactory() {} // Don't delete 64 66 65 static T* createNewObject(BaseObject* creator); 67 Identifier* createIdentifier(const std::string& name); 68 69 bool bLoadable_; 66 70 }; 67 71 … … 76 80 { 77 81 COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl; 78 ClassIdentifier<T>::getIdentifier(name)->addFactory(new ClassFactory<T>); 79 ClassIdentifier<T>::getIdentifier()->setLoadable(bLoadable); 80 Factory::add(name, ClassIdentifier<T>::getIdentifier()); 82 Factory::add(name, new ClassFactory<T>(bLoadable)); 81 83 82 84 return true; … … 90 92 inline BaseObject* ClassFactory<T>::fabricate(BaseObject* creator) 91 93 { 92 return ClassFactory<T>::createNewObject(creator);94 return new T(creator); 93 95 } 94 96 95 97 /** 96 @brief Creates and returns a new object of class T; this is a wrapper for the new operator.97 @return The new object98 98 */ 99 99 template <class T> 100 inline T* ClassFactory<T>::createNewObject(BaseObject* creator)100 inline Identifier* ClassFactory<T>::createIdentifier(const std::string& name) 101 101 { 102 return new T(creator); 102 Identifier* identifier = ClassIdentifier<T>::getIdentifier(name); 103 identifier->addFactory(this); 104 identifier->setLoadable(this->bLoadable_); 105 return identifier; 103 106 } 104 107 } -
code/branches/resource2/src/core/Factory.cc
r3196 r5610 73 73 @param identifier The identifier to add 74 74 */ 75 void Factory::add(const std::string& name, Identifier* identifier)75 void Factory::add(const std::string& name, BaseFactory* factory) 76 76 { 77 getFactoryPointer()->identifierStringMap_[name] = identifier; 78 getFactoryPointer()->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier; 77 getFactoryPointer()->factoryMap_[name] = factory; 79 78 } 80 79 … … 105 104 { 106 105 COUT(3) << "*** Factory: Create class-hierarchy" << std::endl; 107 std::map<std::string, Identifier*>::iterator it;108 it = getFactoryPointer()-> identifierStringMap_.begin();109 (*getFactoryPointer()->identifierStringMap_.begin()).second->startCreatingHierarchy();110 for (it = getFactoryPointer()-> identifierStringMap_.begin(); it != getFactoryPointer()->identifierStringMap_.end(); ++it)106 std::map<std::string, BaseFactory*>::iterator it; 107 it = getFactoryPointer()->factoryMap_.begin(); 108 Identifier::startCreatingHierarchy(); 109 for (it = getFactoryPointer()->factoryMap_.begin(); it != getFactoryPointer()->factoryMap_.end(); ++it) 111 110 { 111 // Create the corresponding identifier first 112 Identifier* identifier = it->second->createIdentifier(it->first); 113 getFactoryPointer()->identifierStringMap_[it->first] = identifier; 114 getFactoryPointer()->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier; 112 115 // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards. 113 BaseObject* temp = (*it).second->fabricate(0);116 BaseObject* temp = identifier->fabricate(0); 114 117 delete temp; 115 118 } 116 (*getFactoryPointer()->identifierStringMap_.begin()).second->stopCreatingHierarchy();119 Identifier::stopCreatingHierarchy(); 117 120 COUT(3) << "*** Factory: Finished class-hierarchy creation" << std::endl; 118 121 } -
code/branches/resource2/src/core/Factory.h
r2761 r5610 61 61 static Identifier* getIdentifier(const std::string& name); 62 62 static Identifier* getIdentifier(const uint32_t id); 63 static void add(const std::string& name, Identifier* identifier);63 static void add(const std::string& name, BaseFactory* factory); 64 64 static void changeNetworkID(Identifier* identifier, const uint32_t oldID, const uint32_t newID); 65 65 static void cleanNetworkIDs(); … … 69 69 70 70 /** @brief Returns the factory-map. */ 71 static const std::map<std::string, Identifier*>& getFac btoryMap()71 static const std::map<std::string, Identifier*>& getFactoryMap() 72 72 { return Factory::getFactoryPointer()->identifierStringMap_; } 73 73 /** @brief Returns the begin-iterator of the factory-map. */ … … 85 85 std::map<std::string, Identifier*> identifierStringMap_; //!< The map, mapping the name with the Identifier 86 86 std::map<uint32_t, Identifier*> identifierNetworkIDMap_; //!< The map, mapping the network ID with the Identifier 87 std::map<std::string, BaseFactory*> factoryMap_; 87 88 }; 88 89 … … 95 96 public: 96 97 virtual BaseObject* fabricate(BaseObject* creator) = 0; 98 virtual Identifier* createIdentifier(const std::string& name) = 0; 97 99 virtual ~BaseFactory() {}; 98 100 };
Note: See TracChangeset
for help on using the changeset viewer.