RepairCommonEndPoint「右端点共有で種別不一致」

源氏物語全系譜6.1.ZELの全体図を#12 桐壷の更衣の母でソートして,PAIRBOX::MoveChannelTo→ PAIRLIST::Takeoutで停止した.この関数では対象ノード対が直列リスト上にあることを仮定している.⇒「共有端点不一致」で「端点共有解除」していなかった.

バックアップも取ったので,ここで修正をフィックスしておこう.

  1. CheckSamePointの戻り値仕様変更@20210106 3箇所
  2. CheckSamePointとCheckPairBoxを統一@20210106 4箇所
  3. CalcPairBoxからSwapBundledPairを切り出す@20210107 4箇所

同上サンプルを#97 若君(紅梅の)でソートして,NAMEBOX:makePairBox→ CheckPairBoxで停止した.「最大区間ノード対の逆転」が起きている.ここでは新規ノード対を生成して端点共有束の末尾に直接接続している.PAIRBOX::SwapBundledPairを実行して最大区間ノード対を差し替えるようにした.

同上サンプルを#106 六条御息所でソートして,TOPOLOGY:CheckPairEndPointでループカウントオーバーが発生した.PAIRBOX #59496:#22720 玉鬘(1)→#10977(0)とPAIRBOX #59510:#22766 雲井の雁(1)→#12405(0)が関係する端点共有だ.玉鬘のノード対が「危険対」になっていて,共有解除と共有設定が反復されている.⇒searchCommonPairでCRITICALPAIRを弾くようにした.

同上サンプルを#110 弘徽殿大后でソートして,COUPLING:TopologicalSort→ TREEVIEW::EraseTreeViewを実行中,PAIRLISTのcancelでデータ数不一致が発生した.detacount=0でデータが残留している.弘徽殿大后の前は,#109 二条太政大臣だ.この事象は#109 二条太政大臣で開いて→終了でも再現できる.この障害はTribeRelocationの出口ではすでに発生している.

障害が起きているのはPAIRLIST #29168だ.MoveSamePointの実行によって生じている.MoveSamePointでは移転元リストと移転先リストが異なるときだけカウントアップする論理になっていた.しかし,これは誤っている.移転元ではつねにカウントダウンしているので,移転元と移転先が同じ場合でもカウントアップは必要だ.

同上サンプルを#123 左大臣の女御でソートして,PAIRBOX:RepairCommonEndPointの出口検査で停止した.「右端点共有で種別不一致」というのが起きている.障害ノードはPAIRBOX #60318:#23480 蛍兵部卿宮の前の北の方(1)→#13153(0)とPAIRBOX #60343:#23492 致仕太政大臣の北の方(1)→#13170(0)だ.samepointにはCOMMON_LEFTEND 左終点共有が入っている.しかし,その前には「左端点共有で種別不一致|端点共有で始点不一致」というのも起きている.確かに,この時点ではそうなっているようだ.

この事例はいろいろと問題がある.共有解除する前の状態は蛍兵部卿宮の前の北の方と致仕太政大臣の北の方の他にPAIRBOX:#57882:#22568 冷泉院(4)→#11028(0)も加わっている.おそらく,この三者は最初から三つ巴の状態になっていたのではないかと思われる.

従来論理では端点共有の接続種別の判定をNAMEBOX::IsBindablePairで実施しているが,この関数の解釈は間違っている.現行のsearchCommonPairの解釈と合わせる必要がある.PAIRBOX:getCommonPairという関数を作って論理の共通化を図った.これで完全に問題は解決した.致仕太政大臣の北の方と蛍兵部卿宮の前の北の方はどういうフローになっているのか分からないが,最終的には端点共有で収まっている.ただし,蛍兵部卿宮の前の北の方と朧月夜はなぜか共有にならない.これは別途調べる必要がある.

▲同上サンプルの直系血族図 基準ノード=#114 先帝でPAIRBOX:SwapBundledPairのエラー,「NOCOMMONPAIRノード対は端点共有束で唯一でなくてはならない」というルールの違反が起きている.

image

藤壷の宮から冷泉院に連結線が2本入っている.1本は桐壷院+藤壷の宮,もう1本は光源氏+藤壷の宮だ.冷泉院は光の実子で桐壷院とは事実上義理の関係にあるため,2本の連結線の太さで書き分けている.もし,これがどちらも養親子関係であったとすれば,長さが同じでNOCOMMONのノード対が2つ存在することになる.

この意味で「NOCOMMONPAIRノード対は端点共有束で唯一」というルールは必ずしも絶対とは言えないのだが,今の場合は,「始点共有で実親子関係⇔養親子関係が一致しない場合は共有不成立 実親子と養親子では連結線の太さが違うなど不具合が発生するため」というルールが適用されなくてはならないところなのだが…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA