abc プロジェクト
14.8.33. TTuneRegion メンバ関数説明 |
メンバ関数名 | TTuneRegion |
定義ファイル名 | TuneRegion.cpp |
定義行 | 37 |
所属名 | TTuneRegion |
アクセス属性 | public |
宣言形式 | TTuneRegion ( TPass4 * aPass4 , int Pos ) |
概要 | TRuneReginクラスの生成 |
戻り値 | |
パラメタ説明 | aPass4 呼び出し元パス4 Pos 開始位置 |
機能説明 | |
備考 | |
呼出し先関数一覧表
参照外部変数一覧表
参照メンバ変数一覧表
参照先一覧表
関数論理チャート
| +--------------------------------------------------+
37 +--+ TTuneRegion::TTuneRegion(TPass4 *aPass4,int Pos) |
38 | { |
+--+-----------------------------------------------+
39 +--- TScript *Script;
40 +--- TToken *Token;
41 +--- int i,Nest;
42 +--- int j;
43 +--- TScValData *ScValData;
44 |
45 +--- Pass4 = aPass4;
46 +--- TokenStartPos = Pos;
47 +--- TokenList = Pass4->TokenList;
48 +--- ValDataList = Pass4->ValDataList;
49 +--- ArgValList = new TStringList; // サブルーチンにする場合の引数リスト
50 +--- BaseValList = new TStringList; // 基本パラメータ名の変数リスト
51 +--- ParamValList = new TStringList; // パラメータ文の変数リスト
52 +--- ValBitsList = new TList;
53 +--- SubRegionList = new TList; // サブリージョンリスト TSubRegion クラス
54 +--- UseAccordingF = false;
55 +--- UsedDynPefThis = false; // DynPefThisスクリプトが使用された。
56 +--- Number = 0;
57 +--- AccordingStr = "";
58 +--- OffsetStr = "";
59 +--- FittingType = 0; // Type = 0:なし、1:least-square,2:user_defined
60 +--- FittingDegree = 0; // 多項式の次数
61 +--- SampledList = NULL; // intの形で Sampledの値がセット(実体は、Scriptのデータ)
62 |
| +------------------------------------+
63 +--+ for(int kk = 0 ; kk < 32 ; kk++){ |
| +--+---------------------------------+
64 | +--- DoToken[kk] = NULL;
65 | +--- DoValToken[kk] = NULL;
| +-+---+
66 | | } |
| +-----+
67 +--- Token = (TToken *)TokenList->Items[Pos];
68 +--- Script = (TScript *)Token->Script;
69 +--- variedCount = 0;
70 |
| +------------------------------------+
71 +--+ if(Script->ScType == sct_install){ |
| +--+---------------------------------+
72 | +--- TuneGroup = tgInstall;
73 | +--- TuneGroupName = "Install";
| +-+---+
74 | | } |
| +-+---+
| +-+---------------------------------------+
74 | | else if(Script->ScType == sct_static){ |
| +-+---------------------------------------+
75 | +--- TuneGroup = tgStatic;
76 | +--- TuneGroupName = "Static";
| +-+---+
77 | | } |
| +-+---+
| +-+-----------------------------------------+
77 | | else if(Script->ScType == sct_dynamic){ |
| +-+-----------------------------------------+
78 | +--- TuneGroup = tgDynamic;
79 | +--- TuneGroupName = "Dynamic";
| +-+---+
80 | | } |
| +-----+
81 +--- //
82 | // region end を探す。(そこまでが、ブロックになる)
83 | // Nestしている場合は、内側は別とする。
84 | //
85 +--- TokenEndPos = -1;
86 +--- Nest = 0;
| +--------------------------------------------+
87 +--+ for(i = Pos ; i < TokenList->Count ; i++){ |
| +--+-----------------------------------------+
88 | +--- Token = (TToken *)TokenList->Items[i];
| | +----------------------------+
89 | +--+ if(Token->Script == NULL){ |
| | +--+-------------------------+
| | | +------------+
90 | | +--+ continue; |
| | | +------------+
| | +-+---+
91 | | | } |
| | +-----+
92 | +--- Script = (TScript *)Token->Script;
| | +------------------------------------+
93 | +--+ if(Script->ScRegion == scr_start){ |
| | +--+---------------------------------+
94 | | +--- Nest++;
| | +-+---+
95 | | | } |
| | +-+---+
| | +-+---------------------------------------+
95 | | | else if(Script->ScRegion == scr_end){ |
| | +-+---------------------------------------+
96 | | +--- Nest--;
| | | +----------------+
97 | | +--+ if(Nest == 0){ |
| | | +--+-------------+
98 | | | +--- TokenEndPos = i;
| | | | +--------+
99 | | | +--+ break; |
| | | | +--------+
| | | +-+---+
100 | | | | } |
| | | +-----+
| | +-+---+
101 | | | } |
| | +-----+
| +-+---+
102 | | } |
| +-----+
| +------------------------+
103 +--+ if(TokenEndPos == -1){ |
| +--+---------------------+
104 | +--- TokenEndPos = Pos; // Loop回避のため
105 | +--- MainF->err("region end が見つかりません。");
| | +----------+
106 | +--+ return; |
| | +----------+
| +-+---+
107 | | } |
| +-----+
| +--------------------------------------+
108 +--+ if(Script->ScAction == sca_unroll){ |
| +--+-----------------------------------+
109 | +--- TuneKind = tkUnroll;
110 | +--- MakeUnrollData(Pos); // Unrollのデータを作成する。
| +-+---+
111 | | } |
| +-+---+
| +-+-------+
111 | | else{ |
| +-+-------+
112 | +--- TuneKind = tkSelect;
113 | +--- MakeSelectData(Pos); // Selectのデータを作成する。
| +-+---+
114 | | } |
| +-----+
115 +--- //
116 | // リージョン開始直前のスクリプト BPsetを探す。
117 | // BPset (ValNameList)から BaseValNameListを作成する。
118 | // もし、定義がない場合は、以前との互換性のために N,NX,NY,NZとなる。
119 | //
| +--------------------------------------+
120 +--+ for(i = TokenEndPos ; i >= 0 ; i--){ |
| +--+-----------------------------------+
121 | +--- Token = (TToken *)TokenList->Items[i];
| | +----------------------------+
122 | +--+ if(Token->Script == NULL){ |
| | +--+-------------------------+
| | | +------------+
123 | | +--+ continue; |
| | | +------------+
| | +-+---+
124 | | | } |
| | +-----+
125 | +--- Script = (TScript *)Token->Script;
| | +----------------------------------------------------------------------+
126 | +--+ if((Script->ScType == sct_BPset)&&(Script->ScValDataList != NULL)){ |
| | +--+-------------------------------------------------------------------+
| | | +------------------------------------------------------+
127 | | +--+ for(j = 0 ; j < Script->ScValDataList->Count ; j++){ |
| | | +--+---------------------------------------------------+
128 | | | +--- ScValData = (TScValData *)Script->ScValDataList->Items[j];
129 | | | +--- BaseValList->AddObject(ScValData->Str,(TObject *)ScValData);
| | | +-+---+
130 | | | | } |
| | | +-----+
| | | +--------+
131 | | +--+ break; |
| | | +--------+
| | +-+---+
132 | | | } |
| | +-----+
| +-+---+
133 | | } |
| +-----+
| +------------------------------+
134 +--+ if(BaseValList->Count == 0){ |
| +--+---------------------------+
135 | +--- BaseValList->AddObject("N",NULL);
136 | +--- BaseValList->AddObject("NX",NULL);
137 | +--- BaseValList->AddObject("NY",NULL);
138 | +--- BaseValList->AddObject("NZ",NULL);
| +-+---+
139 | | } |
| +-----+
+-+---+
140 | } |
+-----+