+ // Offsets to the PolyGlotRandoms[] array of zobrist keys
+ const Key* ZobPiece = PolyGlotRandoms + 0;
+ const Key* ZobCastle = PolyGlotRandoms + 768;
+ const Key* ZobEnPassant = PolyGlotRandoms + 772;
+ const Key* ZobTurn = PolyGlotRandoms + 780;
+
+ // Piece offset is calculated as 64 * (PolyPiece ^ 1) where
+ // PolyPiece is: BP = 0, WP = 1, BN = 2, WN = 3 ... BK = 10, WK = 11
+ const int PieceOfs[] = { 0, 64, 192, 320, 448, 576, 704, 0,
+ 0, 0, 128, 256, 384, 512, 640 };
+
+ // book_key() builds up a PolyGlot hash key out of a position
+ uint64_t book_key(const Position& pos) {
+
+ uint64_t result = 0;
+ Bitboard b = pos.occupied_squares();