abc プロジェクト
14.8.21. OutputReplaceSrc メンバ関数説明

メンバ関数名 OutputReplaceSrc
定義ファイル名TuneRegion.cpp
定義行 4123
所属名 TTuneRegion
アクセス属性 public
宣言形式 void OutputReplaceSrc ( FILE * fp , void * TargetSubRegion , int iusw1 )
概要 ソースの指定範囲を出力(コメントにはしない、Scriptは出力しない)
NestしたScriptの置換も行う
UnRoll以外でのvarid指定も、変換対象となる。
また、TragetSubRegionと一致しないSubRegionは、Skipする。
戻り値
パラメタ説明 fp 出力先ファイルポインタ
TargetSubRegion 対象サブリージョン
iusw1 対象iusw1
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::OutputSelectCaseExecCode TuneRegion.cpp 2374

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::OutputSrcCode TuneRegion.cpp 3938
2 AnsiCompareText

3 c_str

4 fprintf

5 IntToStr

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::SubRegionList TuneRegion.h 143
2 TTuneRegion::TokenEndPos TuneRegion.h 123
3 TTuneRegion::TokenList TuneRegion.h 120
4 TTuneRegion::TokenStartPos TuneRegion.h 122
5 TTuneRegion::TuneKind TuneRegion.h 130
6 TTuneRegion::variedCount TuneRegion.h 157
7 TTuneRegion::variedFromValue TuneRegion.h 159
8 TTuneRegion::variedToValue TuneRegion.h 160
9 TTuneRegion::variedValName TuneRegion.h 158

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

関数論理チャート

        |  +------------------------------------------------------------------------------+ 
  4123  +--+ void TTuneRegion::OutputReplaceSrc(FILE *fp,void *TargetSubRegion,int iusw1) | 
  4124     | {                                                                            | 
           +--+---------------------------------------------------------------------------+ 
  4125        +--- int i,j,k;
  4126        +--- TToken *Token;
  4127        +--- AnsiString s,IndentStr;
  4128        +--- TScript *Script;
  4129        +--- int SubRegionIdx;
  4130        +--- TSubRegion *SubRegion;
  4131        |    
  4132        +--- //
  4133        |    // 対象ブロックを置換して出力する。  
  4134        |    //                                   
  4135        +--- s = "";
  4136        +--- IndentStr = "    ";
  4137        +--- SubRegionIdx = 0;
              |  +--------------------------------------------------+ 
  4138        +--+ for(i = TokenStartPos ; i <= TokenEndPos ; i++){ | 
              |  +--+-----------------------------------------------+ 
  4139        |     +--- Token = (TToken *)TokenList->Items[i];
              |     |  +----------------------------+ 
  4140        |     +--+ if(Token->Script != NULL){ | 
              |     |  +--+-------------------------+ 
  4141        |     |     +--- Script = (TScript *)Token->Script;
              |     |     |  +------------------------------------------------------------+ 
  4142        |     |     +--+ if((Script->ScRegion == scr_start)&&(i != TokenStartPos)){ | 
              |     |     |  +--+---------------------------------------------------------+ 
  4143        |     |     |     +--- // NestしたTuneRegionあり
  4144        |     |     |     +--- TTuneRegion *TuneRegion;
  4145        |     |     |     |    
  4146        |     |     |     +--- TuneRegion = (TTuneRegion *)Script->TuneRegion;
  4147        |     |     |     +--- TuneRegion->OutputSrcCode(fp,"    ",1);
  4148        |     |     |     +--- i = TuneRegion->TokenEndPos;
  4149        |     |     |     +--- //          }else if(Script->ScRegion == scr_substart){
              |     |     |   +-+---+ 
  4150        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------------------------------+ 
  4150        |     |     |   |  else if((Script->ScRegion == scr_substart)                         | 
  4151        |     |     |   |         &&(Script->ScType == sct_select)){      // Sub region Start | 
              |     |     |   +-+-------------------------------------------------------------------+ 
  4152        |     |     |     +--- // SubRegion開始
  4153        |     |     |     |    // もし、TargetSubRegionでなければ、sub region endまで 
  4154        |     |     |     |    // skipする。TargetSubRegionの場合は、そのまま次へ     
  4155        |     |     |     |    //                                                     
              |     |     |     |  +------------------------------------------+ 
  4156        |     |     |     +--+ if(SubRegionIdx < SubRegionList->Count){ | 
              |     |     |     |  +--+---------------------------------------+ 
  4157        |     |     |     |     +--- SubRegion = (TSubRegion *)SubRegionList->Items[SubRegionIdx++];
              |     |     |     |     |  +------------------------------------+ 
  4158        |     |     |     |     +--+ if(SubRegion != TargetSubRegion){  | 
              |     |     |     |     |  +--+---------------------------------+ 
  4159        |     |     |     |     |     +--- i = SubRegion->TokenEndPos; // Skip To End of SubRegion
              |     |     |     |     |   +-+---+ 
  4160        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  4161        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  4162        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------+ 
  4162        |     |     |   |  else if(Script->ScRegion == scr_substart){ | 
              |     |     |   +-+-------------------------------------------+ 
  4163        |     |     |     +--- //
  4164        |     |     |     |    // Pre,PostのサブリージョンのSkip  
  4165        |     |     |     |    // End_SubReguinまでSkipする。         
  4166        |     |     |     |    //                                     
  4167        |     |     |     +--- int Nest = 0;
              |     |     |     |  +--------------------------------+ 
  4168        |     |     |     +--+ for(; i <= TokenEndPos ; i++){ | 
              |     |     |     |  +--+-----------------------------+ 
  4169        |     |     |     |     +--- Token = (TToken *)TokenList->Items[i];
              |     |     |     |     |  +----------------------------+ 
  4170        |     |     |     |     +--+ if(Token->Script != NULL){ | 
              |     |     |     |     |  +--+-------------------------+ 
  4171        |     |     |     |     |     +--- Script = (TScript *)Token->Script;
              |     |     |     |     |     |  +----------------------------------------+ 
  4172        |     |     |     |     |     +--+ if(Script->ScRegion == scr_substart){  | 
              |     |     |     |     |     |  +--+-------------------------------------+ 
  4173        |     |     |     |     |     |     +--- Nest++;
              |     |     |     |     |     |   +-+---+ 
  4174        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-+---+ 
              |     |     |     |     |     |   +-+-----------------------------------------+ 
  4174        |     |     |     |     |     |   |  else if(Script->ScRegion == scr_subend){ | 
              |     |     |     |     |     |   +-+-----------------------------------------+ 
  4175        |     |     |     |     |     |     +--- Nest--;
              |     |     |     |     |     |     |  +----------------+ 
  4176        |     |     |     |     |     |     +--+ if(Nest == 0){ | 
              |     |     |     |     |     |     |  +--+-------------+ 
              |     |     |     |     |     |     |     |  +--------+ 
  4177        |     |     |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |     |     |  +--------+ 
              |     |     |     |     |     |     |   +-+---+ 
  4178        |     |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |     |   +-----+ 
              |     |     |     |     |     |   +-+---+ 
  4179        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |   +-+---+ 
  4180        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  4181        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  4182        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  4183        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------------------------------------------------------------+ 
  4183        |     |   |  else if(Token->TokId == tid_LineEnd){ // 改行コードトークン  | 
              |     |   +-+-------------------------------------------------------------+ 
  4184        |     |     +--- s = Token->OrgStr;
  4185        |     |     +--- fprintf(fp,"%s",s.c_str());
  4186        |     |     +--- IndentStr = "    ";
              |     |   +-+---+ 
  4187        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-----------------------------------------------------+ 
  4187        |     |   |  else if((TuneKind != tkUnroll)&&                     | 
  4188        |     |   |   ((Token->TokId == tid_Val)||(Token->TokId == -1))){ | 
              |     |   +-+-----------------------------------------------------+ 
  4189        |     |     +--- //
  4190        |     |     |    // variedによる変数の置換(Unrollのvariedは対象外) 
  4191        |     |     |    //                                                 
  4192        |     |     +--- s = Token->OrgStr;
  4193        |     |     |    
              |     |     |  +------------------------------+ 
  4194        |     |     +--+ if(TargetSubRegion == NULL){ | 
              |     |     |  +--+---------------------------+ 
              |     |     |     |  +--------------------------------------+ 
  4195        |     |     |     +--+ for(j = 0 ; j < variedCount ; j++){  | 
              |     |     |     |  +--+-----------------------------------+ 
              |     |     |     |     |  +--------------------------------------------------------+ 
  4196        |     |     |     |     +--+ if(AnsiCompareText(Token->Str,variedValName[j]) == 0){ | 
              |     |     |     |     |  +--+-----------------------------------------------------+ 
  4197        |     |     |     |     |     +--- // 定数に置換する。
  4198        |     |     |     |     |     +--- int Idx,Value;
  4199        |     |     |     |     |     |    
  4200        |     |     |     |     |     +--- Idx = iusw1;
              |     |     |     |     |     |  +----------------------------------------+ 
  4201        |     |     |     |     |     +--+ for(k = j+1 ; k < variedCount ; k++){  | 
              |     |     |     |     |     |  +--+-------------------------------------+ 
  4202        |     |     |     |     |     |     +--- Idx /= (variedToValue[k] - variedFromValue[k]+1);
              |     |     |     |     |     |   +-+---+ 
  4203        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
  4204        |     |     |     |     |     +--- Idx = Idx % (variedToValue[j] - variedFromValue[j]+1); // 余り
  4205        |     |     |     |     |     +--- Value = variedFromValue[j] + Idx;
              |     |     |     |     |     |  +----------------------+ 
  4206        |     |     |     |     |     +--+ if(s == Token->Str){ | 
              |     |     |     |     |     |  +--+-------------------+ 
  4207        |     |     |     |     |     |     +--- s = IntToStr(Value);
              |     |     |     |     |     |   +-+---+ 
  4208        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-+---+ 
              |     |     |     |     |     |   +-+-------+ 
  4208        |     |     |     |     |     |   |  else{  | 
              |     |     |     |     |     |   +-+-------+ 
  4209        |     |     |     |     |     |     +--- s = " "+IntToStr(Value);
              |     |     |     |     |     |   +-+---+ 
  4210        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |     |  +--------+ 
  4211        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
  4212        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  4213        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  4214        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  4214        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  4215        |     |     |     +--- //
  4216        |     |     |     |    // SubRegionありの場合の varidの置換                         
  4217        |     |     |     |    // SubRegionごとの varidCountを使用する。                    
  4218        |     |     |     |    // iusw1も、SubRegion単位でのIdxで呼ばれている。(上位から) 
  4219        |     |     |     |    //                                                           
  4220        |     |     |     +--- SubRegion = (TSubRegion *)TargetSubRegion;
              |     |     |     |  +------------------------------------------------+ 
  4221        |     |     |     +--+ for(j = 0 ; j < SubRegion->variedCount ; j++){ | 
              |     |     |     |  +--+---------------------------------------------+ 
              |     |     |     |     |  +--------------------------------------------------------------------+ 
  4222        |     |     |     |     +--+ if(AnsiCompareText(Token->Str,SubRegion->variedValName[j]) == 0){  | 
              |     |     |     |     |  +--+-----------------------------------------------------------------+ 
  4223        |     |     |     |     |     +--- // 定数に置換する。
  4224        |     |     |     |     |     +--- int Idx,Value;
  4225        |     |     |     |     |     |    
  4226        |     |     |     |     |     +--- Idx = iusw1;
              |     |     |     |     |     |  +--------------------------------------------------+ 
  4227        |     |     |     |     |     +--+ for(k = j+1 ; k < SubRegion->variedCount ; k++){ | 
              |     |     |     |     |     |  +--+-----------------------------------------------+ 
  4228        |     |     |     |     |     |     +--- Idx /= (SubRegion->variedToValue[k]
  4229        |     |     |     |     |     |     |        - SubRegion->variedFromValue[k]+1);  
              |     |     |     |     |     |   +-+---+ 
  4230        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
  4231        |     |     |     |     |     +--- Idx = Idx % (SubRegion->variedToValue[j]
  4232        |     |     |     |     |     |         - SubRegion->variedFromValue[j]+1); // 余り 
  4233        |     |     |     |     |     +--- Value = SubRegion->variedFromValue[j] + Idx;
              |     |     |     |     |     |  +----------------------+ 
  4234        |     |     |     |     |     +--+ if(s == Token->Str){ | 
              |     |     |     |     |     |  +--+-------------------+ 
  4235        |     |     |     |     |     |     +--- s = IntToStr(Value);
              |     |     |     |     |     |   +-+---+ 
  4236        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-+---+ 
              |     |     |     |     |     |   +-+-------+ 
  4236        |     |     |     |     |     |   |  else{  | 
              |     |     |     |     |     |   +-+-------+ 
  4237        |     |     |     |     |     |     +--- s = " "+IntToStr(Value);
              |     |     |     |     |     |   +-+---+ 
  4238        |     |     |     |     |     |   |  }  | 
              |     |     |     |     |     |   +-----+ 
              |     |     |     |     |     |  +--------+ 
  4239        |     |     |     |     |     +--+ break; | 
              |     |     |     |     |     |  +--------+ 
              |     |     |     |     |   +-+---+ 
  4240        |     |     |     |     |   |  }  | 
              |     |     |     |     |   +-----+ 
              |     |     |     |   +-+---+ 
  4241        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  4242        |     |     |   |  }  | 
              |     |     |   +-----+ 
  4243        |     |     +--- fprintf(fp,"%s%s",IndentStr.c_str(),s.c_str());
  4244        |     |     +--- IndentStr = "";
              |     |   +-+---+ 
  4245        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------------------------------------------------------------------------+ 
  4245        |     |   |  else if((Token->TokId == tid_Comment1)||(Token->TokId == tid_Comment2)){ | 
              |     |   +-+-------------------------------------------------------------------------+ 
  4246        |     |     +--- // コメントは、インデントなしで出力
  4247        |     |     +--- fprintf(fp,"%s",Token->OrgStr.c_str());
  4248        |     |     +--- IndentStr = "";
              |     |   +-+---+ 
  4249        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
  4249        |     |   |  else{  | 
              |     |   +-+-------+ 
  4250        |     |     +--- fprintf(fp,"%s%s",IndentStr.c_str(),Token->OrgStr.c_str());
  4251        |     |     +--- IndentStr = "";
              |     |   +-+---+ 
  4252        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  4253        |   |  }  | 
              |   +-----+ 
            +-+---+ 
  4254      |  }  | 
            +-----+