From ab69f50c64ef6ec18963630b748285115cb55266 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 27 Apr 2009 17:39:59 +0200 Subject: [PATCH] Micro optimize Position::move_is_check() More then optimization it is worth a bit of better code self documenting. No functional change. Signed-off-by: Marco Costalba --- src/direction.h | 7 +++++++ src/position.cpp | 10 ++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/direction.h b/src/direction.h index 4ca264a0..f2ba6ec3 100644 --- a/src/direction.h +++ b/src/direction.h @@ -74,6 +74,13 @@ inline SignedDirection signed_direction_between_squares(Square s1, Square s2) { return SignedDirection(SignedDirectionTable[s1][s2]); } +inline bool direction_is_diagonal(Square s1, Square s2) { + return DirectionTable[s1][s2] & 2; +} + +inline bool direction_is_straight(Square s1, Square s2) { + return DirectionTable[s1][s2] < 2; +} //// //// Prototypes diff --git a/src/position.cpp b/src/position.cpp index 2ede62fe..5a42792e 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -599,19 +599,17 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const { case BISHOP: return (dcCandidates && bit_is_set(dcCandidates, from)) - || ( direction_between_squares(ksq, to) != DIR_NONE - && bit_is_set(piece_attacks(ksq), to)); + || (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks(ksq), to)); case ROOK: return (dcCandidates && bit_is_set(dcCandidates, from)) - || ( direction_between_squares(ksq, to) != DIR_NONE - && bit_is_set(piece_attacks(ksq), to)); + || (direction_is_straight(ksq, to) && bit_is_set(piece_attacks(ksq), to)); case QUEEN: // Discovered checks are impossible! assert(!bit_is_set(dcCandidates, from)); - return ( direction_between_squares(ksq, to) != DIR_NONE - && bit_is_set(piece_attacks(ksq), to)); + return ( (direction_is_straight(ksq, to) && bit_is_set(piece_attacks(ksq), to)) + || (direction_is_diagonal(ksq, to) && bit_is_set(piece_attacks(ksq), to))); case KING: // Discovered check?