系列枠のシフト管理用ノード対リストを廃止

#ifdef プラグマを潰す作業を続けているところだが,まだ840個も残っている.今日中に終わるだろうか?動作には影響のない益の少ない作業のようにも思われるが,これが完了すればソースコードがかなり読み易くなることは確実なのでがんばってみることにしよう.幸いVSは検索結果を表示するウィンドウを3つ持っているので,残存する#ifdefの検索結果を「検索結果テーブル」に表示しながら,別のウィンドウでキーワード検索するなどのことが並行して実行できるのは大変都合がよい.

ノード対は通常基本世代枠リスト→世代枠→ノード対リストに接続されている.系列枠は世代シフト管理用ノード対リストというのを2種類持っている.一般にリストはリスト要素オブジェクトをスロットゼロを使ってチェーン状にリンクしている.逆に言えば,リスト要素は一つのリストにしか接続できない.系列枠が持っているノード対リストはどうやってノード対にアクセスしているのだろう?

系列枠のprohibitlistとshiftlistは現在使われていないように思われる.⇒終了時にcancelするところはあるが,リストを構成している論理は見当たらない.すでに廃れているのではないだろうか?⇒TRIBEBOX::CleanSansyoでは対象オブジェクトがこの2種のノード対リストである場合は停止するような論理になっている.つまり,明らかにこの2つはとっくの昔に廃止されている.⇒パージは簡単に終わったが,実行時エラーが出た.⇒クラス構成の始末がついていなかった.TRIBEsPROHIBITとTRIBEsSHIFTが残っていた.

この修正に伴ってNAMEBOX::shiftnum,NAMEBOX::targetnumも不用になるのではないか?TRIBEBOX::RemoveFromShiftListも不用になる.UpdateShiftList,ShiftMultiCards,RemoveFromShiftList,DumpShiftList,DumpProhibitListも同様.もしかすると不用ロジックはもっと広範囲に拡がる可能性もある.そもそも,カードシフトという概念自体がすでに崩れているのではないだろうか?もしかするとこれは事実かも知れないが,影響が大き過ぎるので後日ということにして先に進む.OBSOLETEで仮止めしてある部分が廃棄されることは確実なので#ifdefを#if definedに書き換える必要はないと思われるが,OBOSOLETEではあまりに一般的過ぎるので「系列枠のシフト管理用ノード対リストを廃止@20201109」に変えておこう.

▲InitializePrinterはすでに使われていないのではないか

#ifdef _DEBUG, _DEBUG_, XDEBUGの3種をすべて#if defined()に一括変換して#ifdef は362個まで減少した.あとは個別にこつこつと修正してゆくしかない.⇒VSの検索・置換は正規表現が使えるので試してみよう.以下で一括変換できた.

検索:#ifdef (.+)\b
置換:#if defined($1)

キーワードの中に全角@が入っていても処理できる.ただし,この置換は行末に閉じ括弧が入るので行中にコメントが入っているとコンパイルエラーになる.コメントが入っているのは1ファイル1個くらいなのですぐにビルドできるようになった.あとは,存続するものと廃止するものを切り分けるだけだ.#define文は1210個もある.定義だけで値を持たないリテラルをピックアップできればよいのだが…以下の検索式で定義だけのリテラルを検索できる.

検索:#define (?!.*( |\t)).*$

ただし,後ろにコメントが付いているものはこの式では弾かれてしまう.mmm…少しおかしい.49個しかヒットしない.尻尾に何か付いているものがあるのだろうか?⇒コメントが付いているものと思われる.これは別途扱うことにする.

ともかくまず,この49個を始末してしまおう.いや,これらは基本的には問題ない.というか検証する必要はあるにしても原則としては存続というのがルールだ.始末しなくてはならないのはむしろ「無定義」のキーワードだ.それをどうやって見つけることができるだろう?#ifdef から#if definedに書き換える手順の中でそれを一つづつやってきたのだが,一括変換してしまったので境界線が消えてしまった…あとは,#if definedを一つづつチェックするしかないのではないだろうか

コメントを残す

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

CAPTCHA