X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=1b1fef8ac3978a694209d8eacc18f754fb4f2971;hp=2585ef3c84c0775d4d4a965ac69e5f9281fa5128;hb=7013efce4e2d5e0b4834f4fccec98b03b972d629;hpb=e71d52075836e449cb3f4226cf1010c55e2900be diff --git a/src/position.cpp b/src/position.cpp index 2585ef3c..1b1fef8a 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -399,12 +399,12 @@ Bitboard Position::attacks_to(Square s) const { /// Position::piece_attacks_square() tests whether the piece on square f /// attacks square t. -bool Position::piece_attacks_square(Square f, Square t) const { +bool Position::piece_attacks_square(Piece p, Square f, Square t) const { assert(square_is_ok(f)); assert(square_is_ok(t)); - switch (piece_on(f)) + switch (p) { case WP: return pawn_attacks_square(WHITE, f, t); case BP: return pawn_attacks_square(BLACK, f, t); @@ -427,24 +427,11 @@ bool Position::move_attacks_square(Move m, Square s) const { assert(move_is_ok(m)); assert(square_is_ok(s)); - bool is_attack; Square f = move_from(m), t = move_to(m); assert(square_is_occupied(f)); - switch (piece_on(f)) - { - case WP: is_attack = pawn_attacks_square(WHITE, t, s); break; - case BP: is_attack = pawn_attacks_square(BLACK, t, s); break; - case WN: case BN: is_attack = piece_attacks_square(t, s); break; - case WB: case BB: is_attack = piece_attacks_square(t, s); break; - case WR: case BR: is_attack = piece_attacks_square(t, s); break; - case WQ: case BQ: is_attack = piece_attacks_square(t, s); break; - case WK: case BK: is_attack = piece_attacks_square(t, s); break; - default: break; - } - - if (is_attack) + if (piece_attacks_square(piece_on(f), t, s)) return true; // Move the piece and scan for X-ray attacks behind it @@ -984,8 +971,8 @@ void Position::do_castle_move(Move m) { // Update board array board[kfrom] = board[rfrom] = EMPTY; - board[kto] = king_of_color(us); - board[rto] = rook_of_color(us); + board[kto] = piece_of_color_and_type(us, KING); + board[rto] = piece_of_color_and_type(us, ROOK); // Update king square kingSquare[us] = kto; @@ -1348,8 +1335,8 @@ void Position::undo_castle_move(Move m) { // Update board board[rto] = board[kto] = EMPTY; - board[rfrom] = rook_of_color(us); - board[kfrom] = king_of_color(us); + board[rfrom] = piece_of_color_and_type(us, ROOK); + board[kfrom] = piece_of_color_and_type(us, KING); // Update king square kingSquare[us] = kfrom; @@ -1400,7 +1387,7 @@ void Position::undo_promotion_move(Move m, const UndoInfo &u) { set_bit(&(byColorBB[us]), from); set_bit(&(byTypeBB[PAWN]), from); set_bit(&(byTypeBB[0]), from); // HACK: byTypeBB[0] == occupied squares - board[from] = pawn_of_color(us); + board[from] = piece_of_color_and_type(us, PAWN); // Update material npMaterial[us] -= piece_value_midgame(promotion); @@ -1473,7 +1460,7 @@ void Position::undo_ep_move(Move m) { set_bit(&(byColorBB[them]), capsq); set_bit(&(byTypeBB[PAWN]), capsq); set_bit(&(byTypeBB[0]), capsq); - board[capsq] = pawn_of_color(them); + board[capsq] = piece_of_color_and_type(them, PAWN); // Remove moving piece from destination square clear_bit(&(byColorBB[us]), to); @@ -1485,7 +1472,7 @@ void Position::undo_ep_move(Move m) { set_bit(&(byColorBB[us]), from); set_bit(&(byTypeBB[PAWN]), from); set_bit(&(byTypeBB[0]), from); - board[from] = pawn_of_color(us); + board[from] = piece_of_color_and_type(us, PAWN); // Update piece list: pieceList[us][PAWN][index[to]] = from;