X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=7e5aa8660c0e150b4a0d8934220a1aa3535d5902;hp=9acb29669e1633fe76159abcf5ea8241f4e3f8c8;hb=d9e54ceaa1fb38cc16f2b9f68ea45eff85b7c0f5;hpb=88bb3c9422191b2e8260eeb4d5186f5b4708520f diff --git a/src/position.h b/src/position.h index 9acb2966..7e5aa866 100644 --- a/src/position.h +++ b/src/position.h @@ -196,11 +196,9 @@ public: 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; @@ -278,6 +276,7 @@ public: Value eg_value() const; Value non_pawn_material(Color c) const; Phase game_phase() const; + Value mg_pst_delta(Move m) const; // Game termination checks bool is_mate(); @@ -297,7 +296,7 @@ public: void reset_game_ply(); // Position consistency check, for debugging - bool is_ok() const; + bool is_ok(int* failedStep = NULL) const; // Static member functions: static void init_zobrist(); @@ -585,23 +584,28 @@ 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]; } @@ -622,23 +626,23 @@ inline bool Position::black_pawn_attacks_square(Square f, Square t) const { } 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 { @@ -681,6 +685,11 @@ inline Value Position::mg_pst(Color c, PieceType pt, Square s) const { return MgPieceSquareTable[piece_of_color_and_type(c, pt)][s]; } +inline Value Position::mg_pst_delta(Move m) const { + return MgPieceSquareTable[piece_on(move_from(m))][move_to(m)] + -MgPieceSquareTable[piece_on(move_from(m))][move_from(m)]; +} + inline Value Position::eg_pst(Color c, PieceType pt, Square s) const { return EgPieceSquareTable[piece_of_color_and_type(c, pt)][s]; }