インストールしたアクセス解析ツールがようやく動き始めた.現在トータルユーザ36という表示が出ている.うちダイレクトアクセスは2人,それ以外はすべてOrganic Search,つまり検索エンジン経由ということになる.国別ではUSAから1人アクセスがあるようだ.テント村のサイドバーに出しているSTATISTICSでは今日の来訪者101,アクテイブ来訪者24となっているので,数字にはかなり開きがある.Site Kitの使い方はまだよくわからないので,調整が必要なのかもしれないが…
揚陸地点は決まった.ZELKOVA 再開発 2022-12-12,ここから始めるしかない.この版では人名テーブルと結婚テーブルのサイズはいずれも0x2000=8192となっている.
▲初期起動時,TREEVIEW::Refresh→…NAMEBOX::getGeneration中に(coordinate() == ABSOLUTE)で停止する.続行で新規ファイルになってしまう.この一行をコメントアウトすればファイルを開くことができる.DEBUG_NEVERというマクロはSTOPマクロを実行しているだけなので,動作に差の出る理由がよくわからない.
Refreshが呼び出されているということはすでに絶対座標系に切り替わっているはずなので,この位置でgetGenerationが呼び出されていることに問題があるように思われる.これは,「確定世代番号を導入する@20201121」という修正に関わるもので,Bobject::setabsoluteの中で,_generation = GetGeneration()が実行されている.ただし,GetGeneration関数の中で_generationを返しているので,この動作にはやや疑問がある.また,GetGenerationという関数があちこちで重複定義されている点も疑問だ.以下のクラスで再定義されている.
- GENEBOX
- PAIRBOX
- MARGBOX
- TRIBEBOX
- NAMEBOX
- TREEVIEW 相対座標系ではつねに0を返す
- TITLEBOX 相対座標系ではつねに0を返す
その理由はこの関数が仮想関数になっているためだろう.仮想関数にする必要があるのかどうか?というのがそもそも疑問だ._generation に値を代入しているのは,Bobject::setabsoluteだけで,この関数の中ではGetGenerationが呼び出されている.⇒MakeAbsoluteではSetAbsoluteを実行後にCOORDINATE = ABSOLUTEを実行しているので,これで問題ないのではないか?
getGenerationという関数は「常用世代番号」を返すことになっている.この関数をPrintParameterの中から呼び出しているところに問題があるのではないか?PrintParameterという関数は人名枠の中に付加情報として各種パラメータをプリントするための関数であり,絶対座標系以外では使われることはないのではないだろうか?
Collatz12146.ZELを開こうとすると,「登録リンク数が上限の8192を超えました」というエラーが二度発生したあと,「夫・妻リンクともに不在」が多量発生し,CARDLINK::CheckCardLink sc=3840 不正親番号の補正が実行された後,”Buffer too small”という例外が発生する.
今度は「データ不整合がありましたが…」を出したあと,描画できた.
ただし,以下のような複数の障害が発生している.
TREEVIEW::CheckSelectList
UNDOBASE::SetUndoList
UNDOBASE::UndoCopy
UNDONODE::Dispose
特にUNDOでポインタ空が発生しているというのは致命的だ.データ数は8192点まで削減されている.
まず,テーブルサイズを倍増(→16384)させて動作するかどうかを見てみよう.⇒リンカーでエラーになってしまった.
LINK : fatal error LNK1248: イメージ サイズ (823DC000) が最大許容サイズ (80000000) を超えています
「Win32 では1プロセスあたりのユーザーメモリ空間は 2GB」で0x80000000はその上限と思われる.これはWin32の制約なので,どうすることもできない.ちなみに現在の構成プロパティは,スタックサイズ2147483648,ヒープサイズ1073741824,ヒープコミットサイズ1048576に設定されている.現行では「テーブルサイズを2のべき乗にする@20220316」というオプションになっているので,8192点を超えることはできないということになってしまうのだが,「テーブルサイズを2のべき乗にする」というのはどういう効果があるのか?
いや,少なくともこの版では実効性はないようだ.ということは任意の値が取れるということなので,もう少し増やしてみよう.最終版では人名テーブル12300,結婚テーブル10300となっているが,この辺りがギリギリの範囲なのではないだろうか?