// Bitboards for pinned pieces and discovered check candidates
Bitboard discovered_check_candidates(Color c) const;
// Bitboards for pinned pieces and discovered check candidates
Bitboard discovered_check_candidates(Color c) const;
bool move_is_capture(Move m) const;
bool move_is_deep_pawn_push(Move m) const;
bool move_is_pawn_push_to_7th(Move m) const;
bool move_is_capture(Move m) const;
bool move_is_deep_pawn_push(Move m) const;
bool move_is_pawn_push_to_7th(Move m) const;
void backup(UndoInfo &u) const;
void restore(const UndoInfo &u);
void do_move(Move m, UndoInfo &u);
void backup(UndoInfo &u) const;
void restore(const UndoInfo &u);
void do_move(Move m, UndoInfo &u);
void undo_move(Move m, const UndoInfo &u);
void do_null_move(UndoInfo &u);
void undo_null_move(const UndoInfo &u);
void undo_move(Move m, const UndoInfo &u);
void do_null_move(UndoInfo &u);
void undo_null_move(const UndoInfo &u);
void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates);
template<PieceType Piece, bool FindPinned>
void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates);
template<PieceType Piece, bool FindPinned>
- return StepAttackBB[pawn_of_color(c)][s];
+ return StepAttackBB[piece_of_color_and_type(c, PAWN)][s];
+}
+
+template<>
+inline Bitboard Position::piece_attacks<PAWN>(Square s) const {
+ return StepAttackBB[piece_of_color_and_type(opposite_color(sideToMove), PAWN)][s];
&& 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();
&& 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();
&& relative_rank(c, move_to(m)) == RANK_7;
}
inline bool Position::move_is_passed_pawn_push(Move m) const {
Color c = side_to_move();
&& relative_rank(c, move_to(m)) == RANK_7;
}
inline bool Position::move_is_passed_pawn_push(Move m) const {
Color c = side_to_move();
&& 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());
&& 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());