Ignore:
Timestamp:
Sep 24, 2008, 2:43:41 AM (16 years ago)
Author:
イグトランス (egtra)
Message:

IsEqualSymbolをさらに高速化

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/ab_common/src/Lexical/Symbol.cpp

    r736 r752  
    130130    {
    131131        // 静的メンバを考慮
    132         std::string name = symbolNS.back() + '.' + symbol.GetName();
    133         if( GetName() != name ){
     132        //name == className + '.' + memberNameならIsSameAreaNamespaceで名前空間が一致するか調べる。
     133        std::string const& className = symbolNS.back();
     134        std::string const& memberName = symbol.GetName();
     135        std::size_t classNameSize = className.size();
     136        if( name.size() != classNameSize + 1 + memberName.size() ){
    134137            return false;
    135138        }
    136         return IsEqualSymbol( NamespaceScopes( symbolNS.begin(), symbolNS.end() - 1 ), name );
     139        if( std::equal( className.begin(), className.end(), name.begin() )
     140            && name[classNameSize] == '.'
     141            && std::equal( memberName.begin(), memberName.end(), name.begin() + (classNameSize + 1) ) )
     142        {
     143            return namespaceSupporter->IsSameAreaNamespace( GetNamespaceScopes(),
     144                NamespaceScopes( symbolNS.begin(), symbolNS.end() - 1 ) );
     145        }
    137146    }
    138147    return false;
Note: See TracChangeset for help on using the changeset viewer.