mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-20 09:06:45 +08:00
Simplify hidden_checkers()
De-templetize and pass color as function argument. No speed change. No functional change.
This commit is contained in:
@@ -416,36 +416,28 @@ const string Position::pretty(Move move) const {
|
||||
}
|
||||
|
||||
|
||||
/// Position:hidden_checkers<>() returns a bitboard of all pinned (against the
|
||||
/// king) pieces for the given color. Or, when template parameter FindPinned is
|
||||
/// false, the function return the pieces of the given color candidate for a
|
||||
/// discovery check against the enemy king.
|
||||
template<bool FindPinned>
|
||||
Bitboard Position::hidden_checkers() const {
|
||||
/// Position:hidden_checkers() returns a bitboard of all pinned / discovery check
|
||||
/// pieces, according to the call parameters. Pinned pieces protect our king,
|
||||
/// discovery check pieces attack the enemy king.
|
||||
|
||||
// Pinned pieces protect our king, dicovery checks attack the enemy king
|
||||
Bitboard b, result = 0;
|
||||
Bitboard pinners = pieces(FindPinned ? ~sideToMove : sideToMove);
|
||||
Square ksq = king_square(FindPinned ? sideToMove : ~sideToMove);
|
||||
Bitboard Position::hidden_checkers(Square ksq, Color c) const {
|
||||
|
||||
// Pinners are sliders, that give check when candidate pinned is removed
|
||||
pinners &= (pieces(ROOK, QUEEN) & PseudoAttacks[ROOK][ksq])
|
||||
| (pieces(BISHOP, QUEEN) & PseudoAttacks[BISHOP][ksq]);
|
||||
Bitboard b, pinners, result = 0;
|
||||
|
||||
// Pinners are sliders that give check when pinned piece is removed
|
||||
pinners = ( (pieces( ROOK, QUEEN) & PseudoAttacks[ROOK ][ksq])
|
||||
| (pieces(BISHOP, QUEEN) & PseudoAttacks[BISHOP][ksq])) & pieces(c);
|
||||
|
||||
while (pinners)
|
||||
{
|
||||
b = between_bb(ksq, pop_lsb(&pinners)) & pieces();
|
||||
|
||||
if (b && !more_than_one(b) && (b & pieces(sideToMove)))
|
||||
result |= b;
|
||||
if (!more_than_one(b))
|
||||
result |= b & pieces(sideToMove);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Explicit template instantiations
|
||||
template Bitboard Position::hidden_checkers<true>() const;
|
||||
template Bitboard Position::hidden_checkers<false>() const;
|
||||
|
||||
|
||||
/// Position::attackers_to() computes a bitboard of all pieces which attack a
|
||||
/// given square. Slider attacks use occ bitboard as occupancy.
|
||||
|
||||
Reference in New Issue
Block a user