----------------------------------------------------------------------
         Opening Book Structure and Organization  (Ver. 4.0)
                                              Kunihito Hoki, Jan 2009
----------------------------------------------------------------------

このフォルダ内にある probe.c, key.h は，序盤データベース
winbin/book.bin から指手を読み込むプログラムです．サンプルとして参考に
して下さい．なお，このサンプルプログラムでは記録方式がリトルエンディア
ンであることを仮定しています．

book.bin は主に序盤の局面を記憶したファイルであり，インデックスとデー
タベースの 2つの部分により構成されます．

    位置（バイト）
  0x00000 - 0x17fff  インデックス
  0x18000 - 終端     データベース

インデックス部には，局面のハッシュキーからデータベースの位置を求めるテー
ブルが格納されています（ハッシュキーについては probe.c を参照）．
0x4000　個の要素を持ち，局面に対応する要素の番号は，ハッシュキーと
0x3fff の論理積により求めます．一要素の大きさは 6バイトです．

    位置（バイト）   要素の番号
  0x00000 - 0x00005           0
  0x00006 - 0x0000b           1
          .
          .
          .
  0x17ffa - 0x17fff       16383

前半 4バイトはデータベースの位置をファイルの先頭からバイト単位で数えた
値，後半 2バイトはデータベースのサイズをバイト単位で数えた値になります．

  0x00000 - 0x00003    要素 1番目のデータベース位置
  0x00004 - 0x00005    要素 1番目のデータベースサイズ
  0x00006 - 0x00009    要素 2番目のデータベース位置
  0x0000a - 0x0000b    要素 2番目のデータベースサイズ
          .
          .
          .

データベース部は幾つものセクションに分かれています．局面に対応したセク
ションの位置とサイズは，前述のインデックス部により記述されます．

  データベース部 (0x18000 から)：セクション...

更に，セクション内部は多数個の要素に分かれています．

  セクション：要素...

それぞれの要素に，この要素のサイズ (バイト単位)，1局面のハッシュキーに
対応する指手と頻度が羅列されます．

  要素：サイズ (1byte), ハッシュキー (8byte)，指手 (2byte),
        頻度 (2byte), ...

2byte (16bit) からなる指手部には，駒の移動先，移動元，成り・不成りを記
します．位置は将棋盤の升目を左上から右へ数え，0 - 80 の値であらわしま
す．持ち駒を打つ場合，移動元の値は 81 (歩)，82 (香)，83 (桂)，84 (銀)，
85 (金)，86 (角)，87 (飛) になります．

  xxxxxxxx x1111111  移動先の位置
  xx111111 1xxxxxxx  移動元の位置，もしくは打つ駒の種類
  x1xxxxxx xxxxxxxx  成る場合は 1, それ以外は 0

指手 (2byte) と頻度 (2byte) の部分を繰り返し，複数の指手と頻度を登録し
ます．但し，1局面に登録可能な指手数の上限は 32 です．
