From ff211469bafcdc36c8964ae0a4b87ae277cef51a Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 19 Oct 2008 13:56:57 +0100 Subject: [PATCH] Templetize Position::xxx_attacks_square() Signed-off-by: Marco Costalba --- src/position.cpp | 22 +++++++++++----------- src/position.h | 32 ++++++++------------------------ 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/src/position.cpp b/src/position.cpp index 200416c7..e1d05f61 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -408,11 +408,11 @@ bool Position::piece_attacks_square(Square f, Square t) const { switch(piece_on(f)) { case WP: return white_pawn_attacks_square(f, t); case BP: return black_pawn_attacks_square(f, t); - case WN: case BN: return knight_attacks_square(f, t); - case WB: case BB: return bishop_attacks_square(f, t); - case WR: case BR: return rook_attacks_square(f, t); - case WQ: case BQ: return queen_attacks_square(f, t); - case WK: case BK: return king_attacks_square(f, t); + case WN: case BN: return piece_attacks_square(f, t); + case WB: case BB: return piece_attacks_square(f, t); + case WR: case BR: return piece_attacks_square(f, t); + case WQ: case BQ: return piece_attacks_square(f, t); + case WK: case BK: return piece_attacks_square(f, t); default: return false; } @@ -549,7 +549,7 @@ bool Position::move_is_check(Move m, Bitboard dcCandidates) const { switch(move_promotion(m)) { case KNIGHT: - return knight_attacks_square(to, ksq); + return piece_attacks_square(to, ksq); case BISHOP: return bit_is_set(bishop_attacks_bb(to, b), ksq); case ROOK: @@ -670,11 +670,11 @@ bool Position::move_attacks_square(Move m, Square s) const { switch(piece_on(f)) { case WP: return white_pawn_attacks_square(t, s); case BP: return black_pawn_attacks_square(t, s); - case WN: case BN: return knight_attacks_square(t, s); - case WB: case BB: return bishop_attacks_square(t, s); - case WR: case BR: return rook_attacks_square(t, s); - case WQ: case BQ: return queen_attacks_square(t, s); - case WK: case BK: return king_attacks_square(t, s); + case WN: case BN: return piece_attacks_square(t, s); + case WB: case BB: return piece_attacks_square(t, s); + case WR: case BR: return piece_attacks_square(t, s); + case WQ: case BQ: return piece_attacks_square(t, s); + case WK: case BK: return piece_attacks_square(t, s); default: assert(false); } diff --git a/src/position.h b/src/position.h index bf9bba3d..4dcbbf76 100644 --- a/src/position.h +++ b/src/position.h @@ -213,14 +213,13 @@ public: Bitboard attacks_to(Square s) const; Bitboard attacks_to(Square s, Color c) const; bool is_check() const; - bool piece_attacks_square(Square f, Square t) const; bool white_pawn_attacks_square(Square f, Square t) const; bool black_pawn_attacks_square(Square f, Square t) const; - bool knight_attacks_square(Square f, Square t) const; - bool bishop_attacks_square(Square f, Square t) const; - bool rook_attacks_square(Square f, Square t) const; - bool queen_attacks_square(Square f, Square t) const; - bool king_attacks_square(Square f, Square t) const; + + 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 // Properties of moves bool move_is_legal(Move m) const; @@ -590,24 +589,9 @@ inline bool Position::black_pawn_attacks_square(Square f, Square t) const { return bit_is_set(pawn_attacks(BLACK, f), t); } -inline bool Position::knight_attacks_square(Square f, Square t) const { - return bit_is_set(piece_attacks(f), t); -} - -inline bool Position::bishop_attacks_square(Square f, Square t) const { - return bit_is_set(piece_attacks(f), t); -} - -inline bool Position::rook_attacks_square(Square f, Square t) const { - return bit_is_set(piece_attacks(f), t); -} - -inline bool Position::queen_attacks_square(Square f, Square t) const { - return bit_is_set(piece_attacks(f), t); -} - -inline bool Position::king_attacks_square(Square f, Square t) const { - return bit_is_set(piece_attacks(f), t); +template +Bitboard Position::piece_attacks_square(Square f, Square t) const { + return bit_is_set(piece_attacks(f), t); } inline bool Position::pawn_is_passed(Color c, Square s) const { -- 2.39.2