位置評価用のインデックス

小宮日記の「位置評価用のインデックスは領域を重ねている」を読んで、最初はインデックスの意味が分からなかったんですが、いろいろ考えてようやく理解できました。
コメントに書こうと思ったんですが、忘れそうだし、長くなったのでこちらで。


「領域を重ねている」というのは、領域を二重使用するのではなく、定義しているインデックスの値にマスを表す値を加算するので、結局配列を隙間なく使うということなのですね。
28氏にならえばこういう書き方で、

...
kkp_pawn = kkp_hand_end - 9,  /* 1段目の歩はない */
kkp_lance = kkp_pawn + 9*9 - 9,  /* 1段目の香はない */
kkp_knight = kkp_lance + 9*9 - 18,   /* 1,2段目の桂はない */
kkp_silver = kkp_knight + 9*9, 
...

実際に使う時は[kkp_pawn + sq]という使われ方で、歩は1段目(マスでいえば0〜8)には出現しないので、sqは最小でも9。
だからkkp_pawnは36でよく、実際に使われるkkp_pawn + sqは45(=kkp_hand_end)が最小なので問題ない。