Changeset 669 in dev for trunk/ab5.0/abdev/ab_common/src


Ignore:
Timestamp:
Jun 28, 2008, 8:17:17 PM (16 years ago)
Author:
dai_9181
Message:

NamespaceScopes::IsEqualを高速化した(他、リファクタリング)。

Location:
trunk/ab5.0/abdev/ab_common/src/Lexical
Files:
2 edited

Legend:

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

    r516 r669  
    2424        i = i2 + 1;
    2525    }
     26}
     27
     28NamespaceScopes NamespaceScopes::operator+ ( const NamespaceScopes &namespaceScopes ) const
     29{
     30    NamespaceScopes result = *this;
     31    BOOST_FOREACH( const std::string &name, namespaceScopes )
     32    {
     33        result.push_back( name );
     34    }
     35    return result;
     36}
     37
     38bool NamespaceScopes::IsEqual( const NamespaceScopes &namespaceScopes ) const
     39{
     40    if( this->size() != namespaceScopes.size() )
     41    {
     42        return false;
     43    }
     44
     45    for( int i=static_cast<int>(this->size()-1); i>=0; i-- )
     46    {
     47        if( (*this)[i] != namespaceScopes[i] )
     48        {
     49            return false;
     50        }
     51    }
     52
     53    return true;
    2654}
    2755
  • trunk/ab5.0/abdev/ab_common/src/Lexical/NamespaceSupporter.cpp

    r516 r669  
    2121    return ImportsNamespace( namespaceScopes );
    2222}
     23
     24bool NamespaceSupporter::IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const
     25{
     26    if( entryNamespaceScopes.size() )
     27    {
     28        if( IsCoverd( baseNamespaceScopes, entryNamespaceScopes ) )
     29        {
     30            // 包括しているときは同一と見なす
     31            return true;
     32        }
     33    }
     34    else{
     35        if( baseNamespaceScopes.size() )
     36        {
     37            // 名前空間の判断が必要なとき
     38            if( this->importedNamespaces.IsImported( baseNamespaceScopes )
     39                || IsLiving( baseNamespaceScopes ) )
     40            {
     41                // Using指定があるとき
     42                // または
     43                // 指定された名前空間が現在の名前空間スコープと同一のとき
     44                return true;
     45            }
     46        }
     47        else{
     48            return true;
     49        }
     50    }
     51
     52    return false;
     53}
Note: See TracChangeset for help on using the changeset viewer.