+/// Position::update_checkers() updates checkers info, used in do_move()
+template<PieceType Piece>
+inline void Position::update_checkers(Bitboard* pCheckersBB, Square ksq, Square from,
+ Square to, Bitboard dcCandidates) {
+
+ if (Piece != KING && bit_is_set(piece_attacks<Piece>(ksq), to))
+ set_bit(pCheckersBB, to);
+
+ if (Piece != QUEEN && bit_is_set(dcCandidates, from))
+ {
+ if (Piece != ROOK)
+ (*pCheckersBB) |= (piece_attacks<ROOK>(ksq) & rooks_and_queens(side_to_move()));
+
+ if (Piece != BISHOP)
+ (*pCheckersBB) |= (piece_attacks<BISHOP>(ksq) & bishops_and_queens(side_to_move()));
+ }
+}
+
+