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 | } | +-----+