mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Simplify hidden_checkers()
De-templetize and pass color as function argument. No speed change. No functional change.
This commit is contained in:
parent
fe2ed42661
commit
378bcfe760
2 changed files with 14 additions and 22 deletions
|
@ -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.
|
||||
|
|
|
@ -193,7 +193,7 @@ private:
|
|||
|
||||
// Helper functions
|
||||
void do_castle(Square kfrom, Square kto, Square rfrom, Square rto);
|
||||
template<bool FindPinned> Bitboard hidden_checkers() const;
|
||||
Bitboard hidden_checkers(Square ksq, Color c) const;
|
||||
|
||||
// Computing hash keys from scratch (for initialization and debugging)
|
||||
Key compute_key() const;
|
||||
|
@ -331,11 +331,11 @@ inline Bitboard Position::checkers() const {
|
|||
}
|
||||
|
||||
inline Bitboard Position::discovered_check_candidates() const {
|
||||
return hidden_checkers<false>();
|
||||
return hidden_checkers(king_square(~sideToMove), sideToMove);
|
||||
}
|
||||
|
||||
inline Bitboard Position::pinned_pieces() const {
|
||||
return hidden_checkers<true>();
|
||||
return hidden_checkers(king_square(sideToMove), ~sideToMove);
|
||||
}
|
||||
|
||||
inline bool Position::pawn_is_passed(Color c, Square s) const {
|
||||
|
|
Loading…
Add table
Reference in a new issue