optional の処理の設計ノート
20050727 -MT-
20050824 -MT-
【decode】
+ UMS
+ 処理方針
- 出現の有無を保持するため、loop[] と、loopIndex を持ちいる。
-> ループのネストに対応するため、loop 変数を配列にしている。
-> optionaol の処理の先頭で、loopIndex をインクリメントし、
loop[loopIndex] を初期化する。
- @occurs が 0 または false であれば、optional の最後に jump する。
- optional ごとに brunch() を行う。
-> brunch() 先は、optional の最後。
- コンテナ処理の後に、loop[] をインクリメントする。
- optional の処理を終えた際、loop[] が 0 であれば、パターンが存在
しなかった、1 であれば、パターンが存在したことになる。
- @occured が指定してある場合は、パターンの存在の有無を格納する。
+ 生成ソースイメージ
//
loopIndex++;
loop[loopIndex] = 0;
brunch( -20 );
//
//
//
//
//
//
loop[loopIndex]++;
case -20:
if ( loop[loopIndex] == 0 ) {
optionalFlag = false;
} else {
optionalFlag = true;
}
loopIndex--;
//
【encode】
+ UMS
+ 処理方針
- ループ変数の処理、ループの処理ロジックは、decode 側と同じ。
- @occurs の指定が必須。
- brunch() は行わない。
-> @occurs により、パターンの有無が指定されるため。
+ 生成ソースイメージ
//
loopIndex++;
loop[loopIndex] = 0;
if ( true ) {
cpos = -20;
continue;
}
//
//
//
//
//
//
case -20:
loopIndex--;
//
【参照】
- デザインノート 2005061503 : 制御構造の取り扱い
以上