1
0
Fork 0
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:
Marco Costalba 2013-06-23 08:08:16 +02:00
parent fe2ed42661
commit 378bcfe760
2 changed files with 14 additions and 22 deletions

View file

@ -416,36 +416,28 @@ const string Position::pretty(Move move) const {
} }
/// Position:hidden_checkers<>() returns a bitboard of all pinned (against the /// Position:hidden_checkers() returns a bitboard of all pinned / discovery check
/// king) pieces for the given color. Or, when template parameter FindPinned is /// pieces, according to the call parameters. Pinned pieces protect our king,
/// false, the function return the pieces of the given color candidate for a /// discovery check pieces attack the enemy king.
/// discovery check against the enemy king.
template<bool FindPinned>
Bitboard Position::hidden_checkers() const {
// Pinned pieces protect our king, dicovery checks attack the enemy king Bitboard Position::hidden_checkers(Square ksq, Color c) const {
Bitboard b, result = 0;
Bitboard pinners = pieces(FindPinned ? ~sideToMove : sideToMove);
Square ksq = king_square(FindPinned ? sideToMove : ~sideToMove);
// Pinners are sliders, that give check when candidate pinned is removed Bitboard b, pinners, result = 0;
pinners &= (pieces(ROOK, QUEEN) & PseudoAttacks[ROOK][ksq])
| (pieces(BISHOP, QUEEN) & PseudoAttacks[BISHOP][ksq]); // 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) while (pinners)
{ {
b = between_bb(ksq, pop_lsb(&pinners)) & pieces(); b = between_bb(ksq, pop_lsb(&pinners)) & pieces();
if (b && !more_than_one(b) && (b & pieces(sideToMove))) if (!more_than_one(b))
result |= b; result |= b & pieces(sideToMove);
} }
return result; 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 /// Position::attackers_to() computes a bitboard of all pieces which attack a
/// given square. Slider attacks use occ bitboard as occupancy. /// given square. Slider attacks use occ bitboard as occupancy.

View file

@ -193,7 +193,7 @@ private:
// Helper functions // Helper functions
void do_castle(Square kfrom, Square kto, Square rfrom, Square rto); 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) // Computing hash keys from scratch (for initialization and debugging)
Key compute_key() const; Key compute_key() const;
@ -331,11 +331,11 @@ inline Bitboard Position::checkers() const {
} }
inline Bitboard Position::discovered_check_candidates() 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 { 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 { inline bool Position::pawn_is_passed(Color c, Square s) const {