Changeset 669 in dev


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
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/ab_common/include/Lexical/Namespace.h

    r523 r669  
    2020    NamespaceScopes( const std::string &namespaceStr );
    2121    ~NamespaceScopes(){}
     22
     23    NamespaceScopes operator+ ( const NamespaceScopes &namespaceScopes ) const;
    2224
    2325    std::string ToString() const
     
    5052
    5153    // 等しいかをチェック
    52     bool IsEqual( const NamespaceScopes &namespaceScopes ) const
    53     {
    54         if( ToString() == namespaceScopes.ToString() ){
    55             return true;
    56         }
    57         return false;
    58     }
     54    bool IsEqual( const NamespaceScopes &namespaceScopes ) const;
    5955
    6056    // 所属しているかをチェック
  • trunk/ab5.0/abdev/ab_common/include/Lexical/NamespaceSupporter.h

    r668 r669  
    9090
    9191    // 指定された名前空間が同一エリアと見なされるかどうかをチェック
    92     bool IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const
    93     {
    94         if( entryNamespaceScopes.size() )
    95         {
    96             if( IsCoverd( baseNamespaceScopes, entryNamespaceScopes ) )
    97             {
    98                 // 包括しているときは同一と見なす
    99                 return true;
    100             }
    101         }
    102         else{
    103             if( baseNamespaceScopes.size() )
    104             {
    105                 // 名前空間の判断が必要なとき
    106                 if( this->importedNamespaces.IsImported( baseNamespaceScopes )
    107                     || IsLiving( baseNamespaceScopes ) )
    108                 {
    109                     // Using指定があるとき
    110                     // または
    111                     // 指定された名前空間が現在の名前空間スコープと同一のとき
    112                     return true;
    113                 }
    114             }
    115             else{
    116                 return true;
    117             }
    118         }
    119 
    120         return false;
    121     }
     92    bool IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const;
    12293};
    12394
  • 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.