Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 28, 2015, 11:22:21 PM (9 years ago)
Author:
landauf
Message:

use an unordered map and type_index to store identifiers by typeid

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/cpp11_v2/src/libraries/core/class/IdentifierManager.cc

    r10916 r10988  
    6060
    6161        this->identifiers_.insert(identifier);
     62        this->identifierByTypeIndex_[identifier->getTypeInfo()] = identifier;
    6263        this->identifierByString_[identifier->getName()] = identifier;
    6364        this->identifierByLowercaseString_[getLowercase(identifier->getName())] = identifier;
     
    7172    {
    7273        this->identifiers_.erase(identifier);
     74        this->identifierByTypeIndex_.erase(identifier->getTypeInfo());
    7375        this->identifierByString_.erase(identifier->getName());
    7476        this->identifierByLowercaseString_.erase(getLowercase(identifier->getName()));
     
    258260    Identifier* IdentifierManager::getIdentifierByTypeInfo(const std::type_info& typeInfo)
    259261    {
    260         // TODO: use std::type_index and a map to find identifiers by type_info (only with c++11)
    261         for (Identifier* identifer : this->identifiers_)
    262             if (identifer->getTypeInfo() == typeInfo)
    263                 return identifer;
    264         return nullptr;
     262        auto it = this->identifierByTypeIndex_.find(typeInfo);
     263        if (it != this->identifierByTypeIndex_.end())
     264            return it->second;
     265        else
     266            return nullptr;
    265267    }
    266268
Note: See TracChangeset for help on using the changeset viewer.