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

改行コード変換などを高速化

File:
1 edited

Legend:

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

    r728 r735  
    11#include "stdafx.h"
    2 
     2#include <algorithm>
     3#include <boost/checked_delete.hpp>
    34
    45CClass::CClass( const Symbol &symbol, const NamespaceScopesCollection &importedNamespaces )
     
    7475CClass::~CClass()
    7576{
     77    using std::for_each;
     78    using boost::checked_deleter;
    7679    // 動的メンバ
    77     BOOST_FOREACH( Member *member, dynamicMembers )
    78     {
    79         delete member;
    80     }
    81 
     80    for_each( dynamicMembers.begin(), dynamicMembers.end(), checked_deleter<Member>() );
    8281    // 静的メンバ
    83     BOOST_FOREACH( Member *member, staticMembers )
    84     {
    85         delete member;
    86     }
    87 
     82    for_each( staticMembers.begin(), staticMembers.end(), checked_deleter<Member>() );
    8883    // インターフェイス
    89     BOOST_FOREACH( ::Interface *pInterface, interfaces )
    90     {
    91         delete pInterface;
    92     }
    93 
     84    for_each( interfaces.begin(), interfaces.end(), checked_deleter<::Interface>() );
    9485    // テンプレート展開済みのクラス
    95     BOOST_FOREACH( ExpandedTemplateClass *pExpandedTemplateClass, expandedTemplateClasses )
    96     {
    97         delete pExpandedTemplateClass;
    98     }
     86    for_each( expandedTemplateClasses.begin(), expandedTemplateClasses.end(), checked_deleter<ExpandedTemplateClass>() );
    9987}
    10088
     
    233221{
    234222    //メソッドをコピー
    235     BOOST_FOREACH( const CMethod *pBaseMethod, inheritsClass.GetDynamicMethods() ){
     223    const Methods& inheritsClassMethods = inheritsClass.GetDynamicMethods();
     224    GetDynamicMethods().reserve( inheritsClassMethods.size() );
     225    BOOST_FOREACH( const CMethod *pBaseMethod, inheritsClassMethods ){
    236226        CMethod *pMethod = new DynamicMethod( *pBaseMethod );
    237227
     
    264254
    265255    // インターフェイスを引き継ぐ
    266     BOOST_FOREACH( ::Interface *pInterface, inheritsClass.GetInterfaces() )
     256    const Interfaces& inheritsClassInterfaces = inheritsClass.GetInterfaces();
     257    interfaces.reserve( inheritsClassInterfaces.size() );
     258    BOOST_FOREACH( const ::Interface *pInterface, inheritsClassInterfaces )
    267259    {
    268260        interfaces.push_back( new ::Interface( *pInterface ) );
     
    307299    //メソッド
    308300    BOOST_FOREACH( const CMethod *pMethod, GetDynamicMethods() ){
    309         if( lstrcmp( name, pMethod->GetUserProc().GetName().c_str() ) == 0 ){
     301        if(  name == pMethod->GetUserProc().GetName() ){
    310302            return 1;
    311303        }
     
    328320
    329321    // 動的メンバ
    330     BOOST_FOREACH( Member *pMember, dynamicMembers )
     322    BOOST_FOREACH( const Member *pMember, dynamicMembers )
    331323    {
    332324        if( GetName() == pMember->GetName() )
     
    438430        if( this->HasSuperClass() )
    439431        {
     432            const CClass& super = this->GetSuperClass();
    440433            // 基底クラスのサイズを追加
    441             resultSize += this->GetSuperClass().GetSize();
     434            resultSize += super.GetSize();
    442435
    443436            // 基底クラスのアラインメントを取得
    444             alignment = this->GetSuperClass().GetAlignment();
     437            alignment = super.GetAlignment();
    445438        }
    446439        else
     
    455448    BOOST_FOREACH( Member *pMember, dynamicMembers )
    456449    {
     450        const Type& memberType = pMember->GetType();
    457451        // メンバサイズ
    458         int tempMemberSize = pMember->GetType().GetSize();
     452        int tempMemberSize = memberType.GetSize();
    459453
    460454        // 一時アラインメントを算出
    461455        int tempAlignment = tempMemberSize;
    462         if( pMember->GetType().IsStruct() )
     456        if( memberType.IsStruct() )
    463457        {
    464458            // メンバが構造体の場合は、メンバのアラインメントを取得
    465             tempAlignment = pMember->GetType().GetClass().GetAlignment();
     459            tempAlignment = memberType.GetClass().GetAlignment();
    466460        }
    467461
     
    484478            if( tempMemberSize == 0 )
    485479            {
    486                 if( !pMember->GetType().IsStruct() )
     480                if( !memberType.IsStruct() )
    487481                {
    488482                    throw;
     
    847841        if( result.size() )
    848842        {
    849             result += ",";
    850         }
    851 
    852         result += "\"" + pMember->GetName() + "\"";
     843            result += ',';
     844        }
     845
     846        result += '\"' + pMember->GetName() + '\"';
    853847    }
    854848
     
    863857        if( result.size() )
    864858        {
    865             result += ",";
     859            result += ',';
    866860        }
    867861
     
    869863
    870864        char temporary[255];
    871         itoa( offset, temporary, 16 );
     865        _itoa( offset, temporary, 16 );
    872866
    873867        result += (std::string)"&H" + temporary;
Note: See TracChangeset for help on using the changeset viewer.