From: Marco Costalba Date: Tue, 17 Feb 2009 11:00:05 +0000 (+0100) Subject: Change piece_attacks_square() API X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=7013efce4e2d5e0b4834f4fccec98b03b972d629 Change piece_attacks_square() API An extra argument let us simplify some code. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/movegen.cpp b/src/movegen.cpp index 817b4f98..a002e19f 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -539,7 +539,7 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) { } // Luckly we can handle all the other pieces in one go - return ( pos.piece_attacks_square(from, to) + return ( pos.piece_attacks_square(pos.piece_on(from), from, to) && pos.pl_move_is_legal(m, pinned) && !move_promotion(m)); } diff --git a/src/position.cpp b/src/position.cpp index 501674d6..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 diff --git a/src/position.h b/src/position.h index 8e2ecf60..ceebce1c 100644 --- a/src/position.h +++ b/src/position.h @@ -215,7 +215,7 @@ public: template Bitboard piece_attacks_square(Square f, Square t) const; // Dispatch at compile-time - bool piece_attacks_square(Square f, Square t) const; // Dispatch at run-time + bool piece_attacks_square(Piece p, Square f, Square t) const; // Dispatch at run-time // Properties of moves bool pl_move_is_legal(Move m) const; diff --git a/src/search.cpp b/src/search.cpp index b00c270b..c93780b3 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2113,7 +2113,7 @@ namespace { // Case 4: The destination square for m2 is attacked by the moving piece // in m1: - if(pos.piece_attacks_square(t1, t2)) + if(pos.piece_attacks_square(pos.piece_on(t1), t1, t2)) return true; // Case 5: Discovered check, checking piece is the piece moved in m1: