CSA形式のデータ読み込み部 解説 その4
CSA形式のデータは大雑把に言えば
1) 開始局面の図
2) そこからの指し手
から成るわけですが、この1)のことをBonanzaではCSA_headerと呼んでいます。このことを知っているとソースがずいぶん読みやすくなるはずです。
私は「header? 対局者の名前とか対局日のことかな?」と思い込んでいたのでソースを読んでいてもなかなか意味がわかりませんでした。
static int in_CSA_header( tree_t * restrict ptree, record_t *pr, int flag ); // CSAファイル形式の開始局面を読み込みます。 // この引数のflagというのは、CSAファイルの考慮時間をBonanzaの思考ルーチンで保持している考慮時間に反映させるのかだとか、そういったフラグ類で、shogi.hの次の定義が使われているようです。 enum { flag_time = b0001, flag_history = b0010, flag_rep = b0100, flag_detect_hang = b1000, flag_nomake_move = b0010 << 4, flag_nofmargin = b0100 << 4 }; // この一連のフラグについての説明は、また別の記事で。 int in_CSA( tree_t * restrict ptree, record_t *pr, unsigned int *pmove, int flag ) // CSAファイル形式の局面を読み込みます。 // 初回呼び出しのときは開始局面を読み込みます。 // そのあとの呼び出しにおいては、CSAファイルから指し手を1手ずつ読みこみます。 // *pmoveにはそのときの指し手が1手入ります。 // flagに関してはin_CSA_headerのflagと同じ意味です。
あと、record_tで保持しているファイルポインタによるファイルのopen〜close用にread_record〜record_closeという関数があります。
つづく