U64 hash_key(const board_t *board) { ASSERT(board != nullptr); // init U64 key = 0; // pieces for (S8 colour = 0; colour < ColourNb; ++colour) { for (auto sq = board->piece[colour].begin(); sq != board->piece[colour].end(); ++sq) { const S32 piece = board->square[*sq]; key ^= hash_piece_key(piece, *sq); } for (auto sq = board->pawn[colour].begin(); sq != board->pawn[colour].end(); ++sq) { const S32 piece = board->square[*sq]; key ^= hash_piece_key(piece, *sq); } } // castle flags key ^= hash_castle_key(board->flags); // en-passant square const S32 sq = board->ep_square; if (sq != SquareNone) key ^= hash_ep_key(sq); // turn key ^= hash_turn_key(board->turn); return key; }
uint64 hash_key( board_t *board ) { uint64 key; int sq, piece; int index; ASSERT(board != NULL); // init key = 0; // pieces for (index = 1; index <= 32; ++index) { sq = board->piece[index]; if (sq != SquareNone) { piece= INDEX_TO_PIECE(index); key ^= hash_piece_key(piece, SQUARE_TO_90(sq)); } } // turn key ^= hash_turn_key(board->turn); return key; }
uint64 hash_key(const board_t * board) { uint64 key; int colour; const sq_t * ptr; int sq, piece; ASSERT(board!=NULL); // init key = 0; // pieces for (colour = 0; colour < ColourNb; colour++) { for (ptr = &board->piece[colour][0]; (sq=*ptr) != SquareNone; ptr++) { piece = board->square[sq]; key ^= hash_piece_key(piece,sq); } for (ptr = &board->pawn[colour][0]; (sq=*ptr) != SquareNone; ptr++) { piece = board->square[sq]; key ^= hash_piece_key(piece,sq); } } // castle flags key ^= hash_castle_key(board->flags); // en-passant square sq = board->ep_square; if (sq != SquareNone) key ^= hash_ep_key(sq); // turn key ^= hash_turn_key(board->turn); return key; }
U64 hash_pawn_key(const board_t *board) { ASSERT(board != nullptr); // init U64 key = 0; // pawns for (S8 colour = 0; colour < ColourNb; ++colour) { for (auto sq = board->pawn[colour].begin(); sq != board->pawn[colour].end(); ++sq) { const S32 piece = board->square[*sq]; key ^= hash_piece_key(piece, *sq); } } return key; }
uint64 hash_pawn_key(const board_t * board) { uint64 key; int colour; const sq_t * ptr; int sq, piece; ASSERT(board!=NULL); // init key = 0; // pawns for (colour = 0; colour < ColourNb; colour++) { for (ptr = &board->pawn[colour][0]; (sq=*ptr) != SquareNone; ptr++) { piece = board->square[sq]; key ^= hash_piece_key(piece,sq); } } return key; }