Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5611


Ignore:
Timestamp:
Aug 5, 2009, 5:20:06 PM (15 years ago)
Author:
rgrieder
Message:

Stupid TSVN bug: All items in a commit list are always checked by default (which is exactly wrong). It was fixed again in the upcoming 1.6.4 version though.

Location:
code/branches/resource2/src/core
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • code/branches/resource2/src/core/ClassFactory.h

    r5610 r5611  
    5454    class ClassFactory : public BaseFactory
    5555    {
    56         friend class Factory;
    57 
    5856        public:
    5957            static bool create(const std::string& name, bool bLoadable = true);
     
    6159
    6260        private:
    63             ClassFactory(bool bLoadable) : bLoadable_(bLoadable) {}
    64             ClassFactory(const ClassFactory& factory)    // Don't copy
     61            ClassFactory() {}                               // Don't create
     62            ClassFactory(const ClassFactory& factory) {}    // Don't copy
    6563            virtual ~ClassFactory() {}                      // Don't delete
    6664
    67             Identifier* createIdentifier(const std::string& name);
    68 
    69             bool bLoadable_;
     65            static T* createNewObject(BaseObject* creator);
    7066    };
    7167
     
    8076    {
    8177        COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl;
    82         Factory::add(name, new ClassFactory<T>(bLoadable));
     78        ClassIdentifier<T>::getIdentifier(name)->addFactory(new ClassFactory<T>);
     79        ClassIdentifier<T>::getIdentifier()->setLoadable(bLoadable);
     80        Factory::add(name, ClassIdentifier<T>::getIdentifier());
    8381
    8482        return true;
     
    9290    inline BaseObject* ClassFactory<T>::fabricate(BaseObject* creator)
    9391    {
    94         return new T(creator);
     92        return ClassFactory<T>::createNewObject(creator);
    9593    }
    9694
    9795    /**
     96        @brief Creates and returns a new object of class T; this is a wrapper for the new operator.
     97        @return The new object
    9898    */
    9999    template <class T>
    100     inline Identifier* ClassFactory<T>::createIdentifier(const std::string& name)
     100    inline T* ClassFactory<T>::createNewObject(BaseObject* creator)
    101101    {
    102         Identifier* identifier = ClassIdentifier<T>::getIdentifier(name);
    103         identifier->addFactory(this);
    104         identifier->setLoadable(this->bLoadable_);
    105         return identifier;
     102        return new T(creator);
    106103    }
    107104}
  • code/branches/resource2/src/core/Factory.cc

    r5610 r5611  
    7373        @param identifier The identifier to add
    7474    */
    75     void Factory::add(const std::string& name, BaseFactory* factory)
     75    void Factory::add(const std::string& name, Identifier* identifier)
    7676    {
    77         getFactoryPointer()->factoryMap_[name] = factory;
     77        getFactoryPointer()->identifierStringMap_[name] = identifier;
     78        getFactoryPointer()->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier;
    7879    }
    7980
     
    104105    {
    105106        COUT(3) << "*** Factory: Create class-hierarchy" << std::endl;
    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)
     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)
    110111        {
    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;
    115112            // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards.
    116             BaseObject* temp = identifier->fabricate(0);
     113            BaseObject* temp = (*it).second->fabricate(0);
    117114            delete temp;
    118115        }
    119         Identifier::stopCreatingHierarchy();
     116        (*getFactoryPointer()->identifierStringMap_.begin()).second->stopCreatingHierarchy();
    120117        COUT(3) << "*** Factory: Finished class-hierarchy creation" << std::endl;
    121118    }
  • code/branches/resource2/src/core/Factory.h

    r5610 r5611  
    6161            static Identifier* getIdentifier(const std::string& name);
    6262            static Identifier* getIdentifier(const uint32_t id);
    63             static void add(const std::string& name, BaseFactory* factory);
     63            static void add(const std::string& name, Identifier* identifier);
    6464            static void changeNetworkID(Identifier* identifier, const uint32_t oldID, const uint32_t newID);
    6565            static void cleanNetworkIDs();
     
    6969
    7070            /** @brief Returns the factory-map. */
    71             static const std::map<std::string, Identifier*>& getFactoryMap()
     71            static const std::map<std::string, Identifier*>& getFacbtoryMap()
    7272                { return Factory::getFactoryPointer()->identifierStringMap_; }
    7373            /** @brief Returns the begin-iterator of the factory-map. */
     
    8585            std::map<std::string, Identifier*> identifierStringMap_;            //!< The map, mapping the name with the Identifier
    8686            std::map<uint32_t, Identifier*> identifierNetworkIDMap_;        //!< The map, mapping the network ID with the Identifier
    87             std::map<std::string, BaseFactory*> factoryMap_;
    8887    };
    8988
     
    9695        public:
    9796            virtual BaseObject* fabricate(BaseObject* creator) = 0;
    98             virtual Identifier* createIdentifier(const std::string& name) = 0;
    9997            virtual ~BaseFactory() {};
    10098    };
Note: See TracChangeset for help on using the changeset viewer.