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