X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.h;h=8e2ecf6019b812eb5872e2f7db27d36d65ea2528;hp=4b524ec463e0b1be67a460dc9ee64cef04daf6da;hb=2c955f25de9d4c263b6e6d37fef06b378eec49a0;hpb=8365f8ac1ee7f62db18fca8498b3fdb1640674d9 diff --git a/src/position.h b/src/position.h index 4b524ec4..8e2ecf60 100644 --- a/src/position.h +++ b/src/position.h @@ -86,8 +86,8 @@ struct UndoInfo { Key key, pawnKey, materialKey; int rule50; Move lastMove; - PieceType capture; Value mgValue, egValue; + PieceType capture; }; @@ -308,6 +308,9 @@ private: void undo_ep_move(Move m); void find_checkers(); + template + void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates); + template Bitboard hidden_checks(Color c, Square ksq) const; @@ -526,7 +529,12 @@ inline Square Position::initial_qr_square(Color c) const { } inline Bitboard Position::pawn_attacks(Color c, Square s) const { - return StepAttackBB[pawn_of_color(c)][s]; + return StepAttackBB[piece_of_color_and_type(c, PAWN)][s]; +} + +template<> +inline Bitboard Position::piece_attacks(Square s) const { + return StepAttackBB[piece_of_color_and_type(opposite_color(sideToMove), PAWN)][s]; } template<> @@ -667,28 +675,28 @@ inline Phase Position::game_phase() const { inline bool Position::move_is_deep_pawn_push(Move m) const { Color c = side_to_move(); - return piece_on(move_from(m)) == pawn_of_color(c) + return piece_on(move_from(m)) == piece_of_color_and_type(c, PAWN) && relative_rank(c, move_to(m)) > RANK_4; } inline bool Position::move_is_pawn_push_to_7th(Move m) const { Color c = side_to_move(); - return piece_on(move_from(m)) == pawn_of_color(c) + return piece_on(move_from(m)) == piece_of_color_and_type(c, PAWN) && relative_rank(c, move_to(m)) == RANK_7; } inline bool Position::move_is_passed_pawn_push(Move m) const { Color c = side_to_move(); - return piece_on(move_from(m)) == pawn_of_color(c) + return piece_on(move_from(m)) == piece_of_color_and_type(c, PAWN) && pawn_is_passed(c, move_to(m)); } inline bool Position::move_was_passed_pawn_push(Move m) const { Color c = opposite_color(side_to_move()); - return piece_on(move_to(m)) == pawn_of_color(c) + return piece_on(move_to(m)) == piece_of_color_and_type(c, PAWN) && pawn_is_passed(c, move_to(m)); }