X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.cpp;h=cd2a596572b48e7958e4dc9dcd855d87be27bb6a;hb=3ccdb57d6f8a90fbd31cc4cfcd8be59f04c21d64;hp=abfbc9999721d2d6b9ead408c861500db11221fa;hpb=8c328787016f67e7308c709a9a69455f47a8f77c;p=stockfish diff --git a/src/position.cpp b/src/position.cpp index abfbc999..cd2a5965 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -47,7 +47,6 @@ using std::string; Key Position::zobrist[2][8][64]; Key Position::zobEp[64]; Key Position::zobCastle[16]; -Key Position::zobMaterial[2][8][16]; Key Position::zobSideToMove; Key Position::zobExclusion; @@ -828,13 +827,13 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI set_bit(&(byTypeBB[promotion]), to); board[to] = piece_of_color_and_type(us, promotion); - // Update material key - st->materialKey ^= zobMaterial[us][PAWN][pieceCount[us][PAWN]]; - st->materialKey ^= zobMaterial[us][promotion][pieceCount[us][promotion]+1]; - - // Update piece counts - pieceCount[us][PAWN]--; + // Update piece counts pieceCount[us][promotion]++; + pieceCount[us][PAWN]--; + + // Update material key + st->materialKey ^= zobrist[us][PAWN][pieceCount[us][PAWN]]; + st->materialKey ^= zobrist[us][promotion][pieceCount[us][promotion]-1]; // Update piece lists, move the last pawn at index[to] position // and shrink the list. Add a new promotion piece to the list. @@ -932,12 +931,12 @@ void Position::do_capture_move(Key& key, PieceType capture, Color them, Square t else st->npMaterial[them] -= piece_value_midgame(capture); - // Update material hash key - st->materialKey ^= zobMaterial[them][capture][pieceCount[them][capture]]; - // Update piece count pieceCount[them][capture]--; + // Update material hash key + st->materialKey ^= zobrist[them][capture][pieceCount[them][capture]]; + // Update piece list, move the last piece at index[capsq] position // // WARNING: This is a not perfectly revresible operation. When we @@ -1598,8 +1597,8 @@ Key Position::compute_material_key() const { for (PieceType pt = PAWN; pt <= QUEEN; pt++) { int count = piece_count(c, pt); - for (int i = 0; i <= count; i++) - result ^= zobMaterial[c][pt][i]; + for (int i = 0; i < count; i++) + result ^= zobrist[c][pt][i]; } return result; } @@ -1752,15 +1751,6 @@ void Position::init_zobrist() { zobCastle[i] = genrand_int64(); zobSideToMove = genrand_int64(); - - for (int i = 0; i < 2; i++) - for (int j = 0; j < 8; j++) - for (int k = 0; k < 16; k++) - zobMaterial[i][j][k] = (k > 0)? Key(genrand_int64()) : Key(0LL); - - for (int i = 0; i < 16; i++) - zobMaterial[0][KING][i] = zobMaterial[1][KING][i] = Key(0ULL); - zobExclusion = genrand_int64(); }