条件コンパイルをフィックスするときの手続きにミスがあったため,ファイルをクローズしたときのシステムのクリーンアップに失敗していたが,ようやく保健所の調理場検査にパスできる状態になった.理想的には存続するすべてのオブジェクトの固有データ部を完全に殺菌(ゼロクリア)してしまうことが望ましいが,一部環境パラメータを保持しているオブジェクトがあり,そのようなものに関しては別途措置が必要になる.環境パラメータと一般データを形式的に識別することはできないので個別のクラスで対応することになるが,保全の必要な環境パラメータであることを明示するためにこれらを一度ローカル変数に退避しておいて,処理的には全領域をゼロクリアするというのがわかり易いのではないかと思う.保全されるべき環境パラメータには以下がある.
- long BASETABLE::tablesize テーブルの物理サイズ
- HWND COUPLING::hwnd ウィンドウハンドル
- long DATALIST::datasize リスト要素のデータサイズ
- QUICKDB KAKEIZU::carddata, marriage
- CSize TREEVIEW::WindowSize 親ウィンドウサイズ,物理単位 CPoint WindowPost ノーマル画面で親フレームの左上点物理座標 CPoint PreviewPost プレビュー画面で親フレームの左上点物理座標
NODULE::signatureという変数は使われていないので廃止する.
▲ZTシステム構成図7.BAD2.ZELを開いて,LIST::nextで停止する.(!find(listnod))が起きている.TribeRelocationでSIMPLEGRAPH:BuildTightHasseDiagramを実行しているところだ.障害ノードは#2408 NODELISTでSIMPLENODE #14742の次の要素を求めているが,#14742がリスト上に存在しないというエラーになっている.このリストはかなり複雑な構造になっているが,該当要素は存在していないようだ.重婚同類検定では枝グラフを3つ使っている.
SIMPLEGRAPH::TightenHasseDiagramは主語のグラフの他,引数でもう一つのグラフtajugraph3への参照が渡されている.問題の箇所にはこの2つのグラフの節点リストを取り違えるというミスがあった.重婚グラフ検定の論理は一度総点検する必要がある.もし,複数のグラフを併用する必要があるのであれば,2つのグラフを引数で渡して,関数自体はクラスの静的関数とした方がよいと思う.一応現状で正しい論理が実装されているという仮定で修正を入れてみよう.以下の関数を改造した.
- BuildTightHasseDiagram
- TightenHasseDiagram
- sortComponentList
「完全参照リスト管理をサポートする」というオプションをOPTIONSからSPECIFICATIONに格上げし,REFERENCELISTCONTROLとリネームした.⇒裏オプションでも動作することを確認しておこう.⇒参照リスト管理は現在,黒子としての存在に留まり表では活動していない.
SUPPORTSIMPLEGRAPH「SIMPLEGRAPH抽象グラフ検証系をサポートする」というオプションで抽象グラフ検証系を止めてみる.⇒実装した.グラフ検証系なしでも思ったより動作している.ZTシステム構成図7.ZELは難なく開けた.ただし,一部の検査論理は停止している.抽象グラフ検証系でサポートしている機能には以下がある.
- GENEBOX::CheckInverseCycle 危険対枝グラフの循環検定
- TOPOLOGY::TestInevitableMultiZero 重婚同類グラフの循環検定
- TRIBELIST::ShiftDirectAbsolute 絶対世代番号に基づきカードシフト
- TOPOLOGY::FindJikusenAncestor 血糖軸線図のサポート
- TOPOLOGY::MakeLinearEdgeList 系列枠の全順序を決定する
▲SUPPORTSIMPLEGRAPHオフのバージョンで渋沢一族8.ZELの全体図を#211 大川平兵衛の息子で開こうとして,TRIBEBOX:GetAlternativePrimeNodeで停止した.系列優先ノードが決定できない.この系列は#2501 先祖 #950 渋沢 長登(宗安)で,最初は#1038 尾高 平九郎を優先ノードとする親元関係で決定していたはずなのだが,#956 渋沢 やへの婚姻関係に切り替わっている.
最初のGetAlternativePrimeNodeで切り替わり,2回目で失敗しているという構図だ.何が変わったというのだろう?⇒いや,変化していないために停止している.これはこのカードがTRIBEBOX:DecidePrimaryNodeでリジェクトされていることを意味する.つまり,DecidePrimaryNodeとGetAlternativePrimeNodeが相反している.⇒DecidePrimaryNodeに逆婚姻関係を導入して解決した.
どうもDecidePrimaryNodeのできが悪過ぎる.今度は源氏:明石中宮で停止した.この関数は全面的に書き換えた方がよい.この関数では現在の優先ノードのチェックだけを行い,不可のときは自分で代替候補を探すのではなく,GetAlternativePrimeNodeに任せるようにした方がよい.優先ノードチェックの要点は,①GetRealnodeで優先実ノードを確保できるかどうか?②主系列と従系列の基準ノードに対する位置関係,③系列種別が合っているかどうか,だけでよい.