abc プロジェクト
14.2.3. Exec メンバ関数説明

メンバ関数名 Exec
定義ファイル名pass4.cpp
定義行 115
所属名 TPass4
アクセス属性 public
宣言形式 void Exec ( )
概要 スクリプトを実行してチューニングリージョンを生成し、その解析を行う。
解析結果は、各TTuneRegionクラスのデータとして保持される。
スクリプトを実行するエンジンとしての位置づけとなる。
戻り値 なし
パラメタ説明
機能説明 スクリプトを実行してチューニングリージョンを生成し、その解析を行う。
解析結果は、各TTuneRegionクラスのデータとして保持される。
複数のTrueRegionに対応するために、RegionごとのクラスとしてTuneRegionを生成
する形を取る。
スクリプトの解析も、Pass4で済ませ、Pass5では、TuneRegionクラスを参照してソ
ースを生成する。
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TMainF::FormActivate main.cpp 299

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TMainF::err main.cpp 271
2 TMainF::print main.cpp 217
3 Add

4 AddObject

5 Exchange

6 IndexOf

7 Length

8 Pos

9 StrToInt

10 SubString

11 Trim

参照外部変数一覧表
名称 定義ファイル名 定義行
1 MainF main.cpp 26

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TPass4::ABCLib_ValList pass4.h 44
2 TPass4::TokenList pass4.h 42
3 TPass4::TuneRegionList pass4.h 45

参照先一覧表
名称 種別 定義ファイル名 定義行
1 TScript クラス pass3.h 151
2 TToken クラス pass1.h 216
3 TTuneRegion クラス TuneRegion.h 88

関数論理チャート

        |  +----------------------+ 
   115  +--+ void TPass4::Exec()  | 
   116     | {                    | 
           +--+-------------------+ 
   117        +--- int i,i1,j;
   118        +--- TToken *Token;
   119        +--- TScript *Script;
   120        +--- AnsiString s;
   121        +--- TTuneRegion *TuneRegion;
   122        |    
   123        +--- //
   124        |    // トークンのLoop  
   125        |    //                 
              |  +------------------------------------------+ 
   126        +--+ for(i = 0 ; i < TokenList->Count ; i++){ | 
              |  +--+---------------------------------------+ 
   127        |     +--- Token = (TToken *)TokenList->Items[i];
   128        |     +--- /*
   129        |     |            if(Token->TokId == tid_SUBROUTINE){ // 関数名の所得    
   130        |     |                FuncName = ((TToken *)TokenList->Items[i+1])->Str; 
   131        |     |            }else if(Token->TokId == tid_FUNCTION){                
   132        |     |                FuncName = ((TToken *)TokenList->Items[i+1])->Str; 
   133        |     |            }                                                      
   134        |     |    */                                                             
              |     |  +----------------------------+ 
   135        |     +--+ if(Token->Script != NULL){ | 
              |     |  +--+-------------------------+ 
   136        |     |     +--- Script = (TScript *)Token->Script;
              |     |     |  +------------------------------------+ 
   137        |     |     +--+ if(Script->ScType == sct_command){ | 
              |     |     |  +--+---------------------------------+ 
   138        |     |     |     +--- //
   139        |     |     |     |    // FORTRAN 90 の式(コマンド)そのまま出力される。     
   140        |     |     |     |    //                                                     
   141        |     |     |     |    // ここで、ABCLib_xxx = の値の所得も行う。             
   142        |     |     |     |    // 現状では、定数のみが使用可能。(変数や式はエラー)  
   143        |     |     |     |    //                                                     
   144        |     |     |     +--- s = Script->TokStrList->Strings[0];
              |     |     |     |  +----------------------+ 
   145        |     |     |     +--+ if(s.Pos("=") != 0){ | 
              |     |     |     |  +--+-------------------+ 
   146        |     |     |     |     +--- AnsiString ValName,ConstStr;
   147        |     |     |     |     +--- int Data;
   148        |     |     |     |     |    
   149        |     |     |     |     +--- ValName = Trim(s.SubString(1,s.Pos("=")-1));
   150        |     |     |     |     +--- ConstStr = Trim(s.SubString(s.Pos("=")+1,s.Length()));
              |     |     |     |     |  +------+ 
   151        |     |     |     |     +--+ try{ | 
              |     |     |     |     |  +--+---+ 
   152        |     |     |     |     |     +--- Data = StrToInt(ConstStr);
              |     |     |     |     |   +-+---+ 
   153        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |     |  +--------------+ 
   153        |     |     |     |     +--+ catch(...){  | 
              |     |     |     |     |  +--+-----------+ 
   154        |     |     |     |     |     +--- MainF->err("ABCLib変数に整数定数以外が設定されています。 ["+s+"]");
              |     |     |     |     |     |  +----------+ 
   155        |     |     |     |     |     +--+ return;  | 
              |     |     |     |     |     |  +----------+ 
              |     |     |     |     |   +-+---+ 
   156        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   157        |     |     |     |     +--- // 変数に追加
              |     |     |     |     |  +----------------------------------------------+ 
   158        |     |     |     |     +--+ if(ABCLib_ValList->IndexOf(ValName) != -1){  | 
              |     |     |     |     |  +--+-------------------------------------------+ 
   159        |     |     |     |     |     +--- MainF->err("ABCLib変数が2度設定されています。 ["+s+"]");
              |     |     |     |     |     |  +----------+ 
   160        |     |     |     |     |     +--+ return;  | 
              |     |     |     |     |     |  +----------+ 
              |     |     |     |     |   +-+---+ 
   161        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   162        |     |     |     |     +--- ABCLib_ValList->AddObject(ValName,(TObject *)Data);
   163        |     |     |     |     +--- MainF->print("ABCLib変数: "+ s);
              |     |     |     |   +-+---+ 
   164        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |     |  +--------------------------------------------+ 
   165        |     |     |     +--+ for(int j = 0 ; j < Token->Indent ; j++){  | 
              |     |     |     |  +--+-----------------------------------------+ 
   166        |     |     |     |     +--- s = "  "+s;
              |     |     |     |   +-+---+ 
   167        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   168        |     |     |     +--- //              fprintf(fpOut,"%s\n",s.c_str());
              |     |     |   +-+---+ 
   169        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------------------------+ 
   169        |     |     |   |  else if(Script->ScRegion == scr_start){    // リージョン開始 | 
              |     |     |   +-+-------------------------------------------------------------+ 
   170        |     |     |     +--- TuneRegion = new TTuneRegion(this,i);   // リージョン生成
   171        |     |     |     +--- Script->TuneRegion = TuneRegion;
   172        |     |     |     +--- TuneRegionList->Add(TuneRegion);        // リストに追加
   173        |     |     |     +--- // 基本パラメタ名表示を追加 2009/03/05
   174        |     |     |     +--- s = "";
              |     |     |     |  +------------------------------------------------------------+ 
   175        |     |     |     +--+ for(int j = 0 ; j < TuneRegion->BaseValList->Count ; j++){ | 
              |     |     |     |  +--+---------------------------------------------------------+ 
              |     |     |     |     |  +--------------+ 
   176        |     |     |     |     +--+ if(s != ""){ | 
              |     |     |     |     |  +--+-----------+ 
   177        |     |     |     |     |     +--- s += ",";
              |     |     |     |     |   +-+---+ 
   178        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
   179        |     |     |     |     +--- s += TuneRegion->BaseValList->Strings[j];
   180        |     |     |     |     |    
              |     |     |     |   +-+---+ 
   181        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
   182        |     |     |     +--- MainF->print("基本パラメタ名(BPset): "+ s);
              |     |     |   +-+---+ 
   183        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   184        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   185        |   |  }  | 
              |   +-----+ 
   186        +--- //
   187        |    // TuneRegionListをTuneRegion->Number順に並べる。  
   188        |    //                                                 
              |  +------------------------------------------------+ 
   189        +--+ for(i = 0 ; i < TuneRegionList->Count ; i++){  | 
              |  +--+---------------------------------------------+ 
              |     |  +--------------------------------------------------+ 
   190        |     +--+ for(j = i+1 ; j < TuneRegionList->Count ; j++){  | 
              |     |  +--+-----------------------------------------------+ 
              |     |     |  +--------------------------------------------------------------+ 
   191        |     |     +--+ if(((TTuneRegion *)TuneRegionList->Items[i])->Number >       | 
   192        |     |     |  |         ((TTuneRegion *)TuneRegionList->Items[j])->Number){  | 
              |     |     |  +--+-----------------------------------------------------------+ 
   193        |     |     |     +--- TuneRegionList->Exchange(i,j);
              |     |     |   +-+---+ 
   194        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
   195        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
   196        |   |  }  | 
              |   +-----+ 
            +-+---+ 
   197      |  }  | 
            +-----+