struct UndoInfo {
int castleRights;
Square epSquare;
- Bitboard checkersBB;
+ Bitboard checkersBB, pinners[2], pinned[2], dcCandidates[2];
Key key, pawnKey, materialKey;
int rule50;
Move lastMove;
// Bitboards for pinned pieces and discovered check candidates
Bitboard discovered_check_candidates(Color c) const;
+ Bitboard pinned_pieces(Color c, Bitboard& p) const;
Bitboard pinned_pieces(Color c) const;
// Checking pieces
template<PieceType>
Bitboard piece_attacks_square(Square f, Square t) const; // Dispatch at compile-time
- bool piece_attacks_square(Square f, Square t) const; // Dispatch at run-time
+ bool piece_attacks_square(Piece p, Square f, Square t) const; // Dispatch at run-time
// Properties of moves
bool pl_move_is_legal(Move m) const;
void update_checkers(Bitboard* pCheckersBB, Square ksq, Square from, Square to, Bitboard dcCandidates);
template<PieceType Piece, bool FindPinned>
- Bitboard hidden_checks(Color c, Square ksq) const;
+ Bitboard hidden_checks(Color c, Square ksq, Bitboard& pinners) const;
// Computing hash keys from scratch (for initialization and debugging)
Key compute_key() const;
// Bitboards
Bitboard byColorBB[2], byTypeBB[8];
Bitboard checkersBB;
+ mutable Bitboard pinners[2], pinned[2], dcCandidates[2];
// Board
Piece board[64];