Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jun 6, 2015, 2:45:20 PM (9 years ago)
Author:
landauf
Message:

statically initialized instances may contain a type. currently not used.

Location:
code/branches/core7/src/libraries/core/module
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core7/src/libraries/core/module/ModuleInstance.cc

    r10521 r10530  
    4848    void ModuleInstance::addStaticallyInitializedInstance(StaticallyInitializedInstance* instance)
    4949    {
    50         this->staticallyInitializedInstances_.insert(instance);
    51     }
    52 
    53     void ModuleInstance::loadAllStaticallyInitializedInstances()
    54     {
    55         for (std::set<StaticallyInitializedInstance*>::iterator it = this->staticallyInitializedInstances_.begin(); it != this->staticallyInitializedInstances_.end(); ++it)
    56             (*it)->load();
    57     }
    58 
    59     void ModuleInstance::unloadAllStaticallyInitializedInstances()
    60     {
    61         for (std::set<StaticallyInitializedInstance*>::iterator it = this->staticallyInitializedInstances_.begin(); it != this->staticallyInitializedInstances_.end(); ++it)
    62             (*it)->unload();
     50        this->staticallyInitializedInstancesByType_[instance->getType()].insert(instance);
    6351    }
    6452
    6553    void ModuleInstance::removeStaticallyInitializedInstance(StaticallyInitializedInstance* instance)
    6654    {
    67         this->staticallyInitializedInstances_.erase(instance);
     55        this->staticallyInitializedInstancesByType_[instance->getType()].erase(instance);
     56    }
     57
     58    void ModuleInstance::loadAllStaticallyInitializedInstances(StaticallyInitializedInstance::Type type)
     59    {
     60        const std::set<StaticallyInitializedInstance*>& instances = this->staticallyInitializedInstancesByType_[type];
     61        for (std::set<StaticallyInitializedInstance*>::iterator it = instances.begin(); it != instances.end(); ++it)
     62            (*it)->load();
     63    }
     64
     65    void ModuleInstance::unloadAllStaticallyInitializedInstances(StaticallyInitializedInstance::Type type)
     66    {
     67        const std::set<StaticallyInitializedInstance*>& instances = this->staticallyInitializedInstancesByType_[type];
     68        for (std::set<StaticallyInitializedInstance*>::iterator it = instances.begin(); it != instances.end(); ++it)
     69            (*it)->unload();
    6870    }
    6971
    7072    void ModuleInstance::deleteAllStaticallyInitializedInstances()
    7173    {
    72         std::set<StaticallyInitializedInstance*> copy(this->staticallyInitializedInstances_);
    73         this->staticallyInitializedInstances_.clear();
    74         for (std::set<StaticallyInitializedInstance*>::iterator it = copy.begin(); it != copy.end(); ++it)
    75             delete (*it);
     74        std::map<StaticallyInitializedInstance::Type, std::set<StaticallyInitializedInstance*> > copy(this->staticallyInitializedInstancesByType_);
     75        this->staticallyInitializedInstancesByType_.clear();
     76        for (std::map<StaticallyInitializedInstance::Type, std::set<StaticallyInitializedInstance*> >::iterator it1 = copy.begin(); it1 != copy.end(); ++it1)
     77            for (std::set<StaticallyInitializedInstance*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2)
     78                delete (*it2);
    7679    }
    7780
  • code/branches/core7/src/libraries/core/module/ModuleInstance.h

    r10518 r10530  
    3333
    3434#include <set>
     35#include <map>
    3536#include <string>
     37
     38#include "StaticallyInitializedInstance.h"
    3639
    3740namespace orxonox
     
    4447
    4548            void addStaticallyInitializedInstance(StaticallyInitializedInstance* instance);
    46             void loadAllStaticallyInitializedInstances();
    47             void unloadAllStaticallyInitializedInstances();
    4849            void removeStaticallyInitializedInstance(StaticallyInitializedInstance* instance);
     50
     51            void loadAllStaticallyInitializedInstances(StaticallyInitializedInstance::Type type);
     52            void unloadAllStaticallyInitializedInstances(StaticallyInitializedInstance::Type type);
     53
    4954            void deleteAllStaticallyInitializedInstances();
    5055
     
    6166
    6267        private:
    63             std::set<StaticallyInitializedInstance*> staticallyInitializedInstances_;
     68            std::map<StaticallyInitializedInstance::Type, std::set<StaticallyInitializedInstance*> > staticallyInitializedInstancesByType_;
    6469            std::string name_;
    6570            DynLib* dynLib_;
  • code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.cc

    r10522 r10530  
    3333namespace orxonox
    3434{
    35     StaticallyInitializedInstance::StaticallyInitializedInstance()
     35    StaticallyInitializedInstance::StaticallyInitializedInstance(Type type)
    3636    {
     37        this->type_ = type;
    3738        this->module_ = ModuleInstance::getCurrentModuleInstance();
    3839        this->module_->addStaticallyInitializedInstance(this);
  • code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.h

    r10522 r10530  
    3737    {
    3838        public:
    39             StaticallyInitializedInstance();
     39            typedef int Type;
     40
     41            StaticallyInitializedInstance(Type type);
    4042            virtual ~StaticallyInitializedInstance();
    4143
     
    4345            virtual void unload() = 0;
    4446
     47            inline Type getType() const
     48                { return this->type_; }
     49
    4550        private:
    4651            ModuleInstance* module_;
     52            Type type_;
    4753    };
    4854}
Note: See TracChangeset for help on using the changeset viewer.