Ignore:
Timestamp:
Aug 25, 2008, 5:38:29 PM (16 years ago)
Author:
イグトランス (egtra)
Message:

Symbol周りを高速化

File:
1 edited

Legend:

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

    r632 r736  
    55const NamespaceSupporter *Symbol::namespaceSupporter = NULL;
    66
    7 char *calcNames[256] = {
    8     "xor",
     7char const *calcNames[256] = {
     8    0,
    99};
    1010void InitCalcNames()
     
    1414        return;
    1515    }
    16 
    17     memset( calcNames, 0, 255 * sizeof(char *) );
    1816    calcNames[CALC_XOR] = "xor";
    1917    calcNames[CALC_OR] = "or";
     
    106104    if( namespaceScopes.size() )
    107105    {
    108         return namespaceScopes.ToString() + "." + name;
     106        return namespaceScopes.ToString() + '.' + name;
    109107    }
    110108
     
    123121bool Symbol::IsEqualSymbol( const Symbol &symbol ) const
    124122{
    125     if( IsEqualSymbol( symbol.GetNamespaceScopes(), symbol.GetName() ) )
     123    const NamespaceScopes &symbolNS = symbol.GetNamespaceScopes();
     124    if( IsEqualSymbol( symbolNS, symbol.GetName() ) )
    126125    {
    127126        return true;
    128127    }
    129128
    130     if( symbol.GetNamespaceScopes().size() >= 1 )
     129    if( !symbolNS.empty() )
    131130    {
    132131        // 静的メンバを考慮
    133         NamespaceScopes namespaceScopes( symbol.GetNamespaceScopes() );
    134         std::string name = namespaceScopes[namespaceScopes.size()-1] + "." + symbol.GetName();
    135         namespaceScopes.pop_back();
    136 
    137         return IsEqualSymbol( namespaceScopes, name );
     132        std::string name = symbolNS.back() + '.' + symbol.GetName();
     133        if( GetName() != name ){
     134            return false;
     135        }
     136        return IsEqualSymbol( NamespaceScopes( symbolNS.begin(), symbolNS.end() - 1 ), name );
    138137    }
    139138    return false;
Note: See TracChangeset for help on using the changeset viewer.