From 6828325881eb823ddfb2e6ea72122c3a4576d240 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 27 May 2012 13:43:15 +0100 Subject: [PATCH 1/1] Retire PieceOffset[] in book.cpp And calculate piece offset on the fly. Also improve comments. No functional change. Signed-off-by: Marco Costalba --- src/book.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/book.cpp b/src/book.cpp index fbb1984c..cc433a90 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -306,11 +306,6 @@ namespace { const Key* ZobEnPassant = PolyGlotRandoms + 772; const Key* ZobTurn = PolyGlotRandoms + 780; - // PieceOffset is calculated as 64 * (PolyPiece ^ 1) where PolyPiece - // is: BP = 0, WP = 1, BN = 2, WN = 3 ... BK = 10, WK = 11 - const int PieceOffset[] = { 0, 64, 192, 320, 448, 576, 704, 0, - 0, 0, 128, 256, 384, 512, 640 }; - // book_key() returns the PolyGlot hash key of the given position uint64_t book_key(const Position& pos) { @@ -319,8 +314,12 @@ namespace { while (b) { + // Piece offset is at 64 * polyPiece where polyPiece is defined as: + // BP = 0, WP = 1, BN = 2, WN = 3, ... BK = 10, WK = 11 Square s = pop_1st_bit(&b); - key ^= ZobPiece[PieceOffset[pos.piece_on(s)] + s]; + Piece p = pos.piece_on(s); + int polyPiece = 2 * (type_of(p) - 1) + (color_of(p) == WHITE); + key ^= ZobPiece[64 * polyPiece + s]; } b = pos.can_castle(ALL_CASTLES); -- 2.39.2