X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=91e0a5b69767ee247a3aa330e290708334ee06ea;hp=ca233aa31d53d0dc70a715a35420164d345ea615;hb=2bea93975e84f6b8e4d5675c86bbb3f32b17efc4;hpb=11910d44e0b45ac3036cfd5396cddf864dd753a0 diff --git a/src/position.h b/src/position.h index ca233aa3..91e0a5b6 100644 --- a/src/position.h +++ b/src/position.h @@ -194,13 +194,9 @@ public: Bitboard sliding_attacks(Square s, Direction d) const; Bitboard ray_attacks(Square s, SignedDirection d) const; Bitboard pawn_attacks(Color c, Square s) const; - Bitboard white_pawn_attacks(Square s) const; - Bitboard black_pawn_attacks(Square s) const; - Bitboard knight_attacks(Square s) const; - Bitboard bishop_attacks(Square s) const; - Bitboard rook_attacks(Square s) const; - Bitboard queen_attacks(Square s) const; - Bitboard king_attacks(Square s) const; + + template + Bitboard piece_attacks(Square s) const; // Bitboards for pinned pieces and discovered check candidates Bitboard discovered_check_candidates(Color c) const; @@ -370,10 +366,6 @@ private: }; -/// An array of member functions to dispatch attacks_square -typedef Bitboard (Position::* Piece_attacks_fn)(Square s) const; -extern const Piece_attacks_fn piece_attacks_fn[]; - //// //// Inline functions //// @@ -582,31 +574,28 @@ inline Bitboard Position::pawn_attacks(Color c, Square s) const { return StepAttackBB[pawn_of_color(c)][s]; } -inline Bitboard Position::white_pawn_attacks(Square s) const { - return pawn_attacks(WHITE, s); -} - -inline Bitboard Position::black_pawn_attacks(Square s) const { - return pawn_attacks(BLACK, s); -} - -inline Bitboard Position::knight_attacks(Square s) const { +template<> +inline Bitboard Position::piece_attacks(Square s) const { return StepAttackBB[KNIGHT][s]; } -inline Bitboard Position::rook_attacks(Square s) const { - return rook_attacks_bb(s, occupied_squares()); +template<> +inline Bitboard Position::piece_attacks(Square s) const { + return bishop_attacks_bb(s, occupied_squares()); } -inline Bitboard Position::bishop_attacks(Square s) const { - return bishop_attacks_bb(s, occupied_squares()); +template<> +inline Bitboard Position::piece_attacks(Square s) const { + return rook_attacks_bb(s, occupied_squares()); } -inline Bitboard Position::queen_attacks(Square s) const { - return rook_attacks(s) | bishop_attacks(s); +template<> +inline Bitboard Position::piece_attacks(Square s) const { + return piece_attacks(s) | piece_attacks(s); } -inline Bitboard Position::king_attacks(Square s) const { +template<> +inline Bitboard Position::piece_attacks(Square s) const { return StepAttackBB[KING][s]; } @@ -619,31 +608,31 @@ inline bool Position::is_check() const { } inline bool Position::white_pawn_attacks_square(Square f, Square t) const { - return bit_is_set(white_pawn_attacks(f), t); + return bit_is_set(pawn_attacks(WHITE, f), t); } inline bool Position::black_pawn_attacks_square(Square f, Square t) const { - return bit_is_set(black_pawn_attacks(f), t); + return bit_is_set(pawn_attacks(BLACK, f), t); } inline bool Position::knight_attacks_square(Square f, Square t) const { - return bit_is_set(knight_attacks(f), t); + return bit_is_set(piece_attacks(f), t); } inline bool Position::bishop_attacks_square(Square f, Square t) const { - return bit_is_set(bishop_attacks(f), t); + return bit_is_set(piece_attacks(f), t); } inline bool Position::rook_attacks_square(Square f, Square t) const { - return bit_is_set(rook_attacks(f), t); + return bit_is_set(piece_attacks(f), t); } inline bool Position::queen_attacks_square(Square f, Square t) const { - return bit_is_set(queen_attacks(f), t); + return bit_is_set(piece_attacks(f), t); } inline bool Position::king_attacks_square(Square f, Square t) const { - return bit_is_set(king_attacks(f), t); + return bit_is_set(piece_attacks(f), t); } inline bool Position::pawn_is_passed(Color c, Square s) const {