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という関数があります。


つづく