1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 00:33:09 +00:00

Change hidden checkers API

After previous patch is no more needed to pass
the color, becuase it is always the side to move.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2011-07-16 09:56:34 +01:00
parent 4894231ff7
commit 69f4954df1
4 changed files with 22 additions and 25 deletions

View file

@ -213,7 +213,7 @@ MoveStack* generate<MV_NON_CAPTURE_CHECK>(const Position& pos, MoveStack* mlist)
assert(pos.piece_on(ksq) == make_piece(opposite_color(us), KING)); assert(pos.piece_on(ksq) == make_piece(opposite_color(us), KING));
// Discovered non-capture checks // Discovered non-capture checks
b = dc = pos.discovered_check_candidates(us); b = dc = pos.discovered_check_candidates();
while (b) while (b)
{ {
@ -318,7 +318,7 @@ MoveStack* generate<MV_LEGAL>(const Position& pos, MoveStack* mlist) {
assert(pos.is_ok()); assert(pos.is_ok());
MoveStack *last, *cur = mlist; MoveStack *last, *cur = mlist;
Bitboard pinned = pos.pinned_pieces(pos.side_to_move()); Bitboard pinned = pos.pinned_pieces();
last = pos.in_check() ? generate<MV_EVASION>(pos, mlist) last = pos.in_check() ? generate<MV_EVASION>(pos, mlist)
: generate<MV_NON_EVASION>(pos, mlist); : generate<MV_NON_EVASION>(pos, mlist);

View file

@ -78,12 +78,11 @@ namespace {
CheckInfo::CheckInfo(const Position& pos) { CheckInfo::CheckInfo(const Position& pos) {
Color us = pos.side_to_move(); Color them = opposite_color(pos.side_to_move());
Color them = opposite_color(us);
Square ksq = pos.king_square(them); Square ksq = pos.king_square(them);
dcCandidates = pos.discovered_check_candidates(us); pinned = pos.pinned_pieces();
pinned = pos.pinned_pieces(us); dcCandidates = pos.discovered_check_candidates();
checkSq[PAWN] = pos.attacks_from<PAWN>(ksq, them); checkSq[PAWN] = pos.attacks_from<PAWN>(ksq, them);
checkSq[KNIGHT] = pos.attacks_from<KNIGHT>(ksq); checkSq[KNIGHT] = pos.attacks_from<KNIGHT>(ksq);
@ -366,12 +365,12 @@ void Position::print(Move move) const {
/// discovery check against the enemy king. /// discovery check against the enemy king.
template<bool FindPinned> template<bool FindPinned>
Bitboard Position::hidden_checkers(Color c) const { Bitboard Position::hidden_checkers() const {
// Pinned pieces protect our king, dicovery checks attack the enemy king // Pinned pieces protect our king, dicovery checks attack the enemy king
Bitboard b, result = EmptyBoardBB; Bitboard b, result = EmptyBoardBB;
Bitboard pinners = pieces(FindPinned ? opposite_color(c) : c); Bitboard pinners = pieces(FindPinned ? opposite_color(sideToMove) : sideToMove);
Square ksq = king_square(FindPinned ? c : opposite_color(c)); Square ksq = king_square(FindPinned ? sideToMove : opposite_color(sideToMove));
// Pinners are sliders, that give check when candidate pinned is removed // Pinners are sliders, that give check when candidate pinned is removed
pinners &= (pieces(ROOK, QUEEN) & RookPseudoAttacks[ksq]) pinners &= (pieces(ROOK, QUEEN) & RookPseudoAttacks[ksq])
@ -382,7 +381,7 @@ Bitboard Position::hidden_checkers(Color c) const {
b = squares_between(ksq, pop_1st_bit(&pinners)) & occupied_squares(); b = squares_between(ksq, pop_1st_bit(&pinners)) & occupied_squares();
// Only one bit set and is an our piece? // Only one bit set and is an our piece?
if (b && !(b & (b - 1)) && (b & pieces(c))) if (b && !(b & (b - 1)) && (b & pieces(sideToMove)))
result |= b; result |= b;
} }
return result; return result;
@ -390,23 +389,21 @@ Bitboard Position::hidden_checkers(Color c) const {
/// Position:pinned_pieces() returns a bitboard of all pinned (against the /// Position:pinned_pieces() returns a bitboard of all pinned (against the
/// king) pieces for the given color. Note that checkersBB bitboard must /// king) pieces for the side to move.
/// be already updated.
Bitboard Position::pinned_pieces(Color c) const { Bitboard Position::pinned_pieces() const {
return hidden_checkers<true>(c); return hidden_checkers<true>();
} }
/// Position:discovered_check_candidates() returns a bitboard containing all /// Position:discovered_check_candidates() returns a bitboard containing all
/// pieces for the given side which are candidates for giving a discovered /// pieces for the side to move which are candidates for giving a discovered
/// check. Contrary to pinned_pieces() here there is no need of checkersBB /// check.
/// to be already updated.
Bitboard Position::discovered_check_candidates(Color c) const { Bitboard Position::discovered_check_candidates() const {
return hidden_checkers<false>(c); return hidden_checkers<false>();
} }
/// Position::attackers_to() computes a bitboard containing all pieces which /// Position::attackers_to() computes a bitboard containing all pieces which
@ -497,7 +494,7 @@ bool Position::pl_move_is_legal(Move m, Bitboard pinned) const {
assert(is_ok()); assert(is_ok());
assert(move_is_ok(m)); assert(move_is_ok(m));
assert(pinned == pinned_pieces(side_to_move())); assert(pinned == pinned_pieces());
Color us = side_to_move(); Color us = side_to_move();
Square from = move_from(m); Square from = move_from(m);
@ -688,7 +685,7 @@ bool Position::move_gives_check(Move m, const CheckInfo& ci) const {
assert(is_ok()); assert(is_ok());
assert(move_is_ok(m)); assert(move_is_ok(m));
assert(ci.dcCandidates == discovered_check_candidates(side_to_move())); assert(ci.dcCandidates == discovered_check_candidates());
assert(piece_color(piece_on(move_from(m))) == side_to_move()); assert(piece_color(piece_on(move_from(m))) == side_to_move());
Square from = move_from(m); Square from = move_from(m);

View file

@ -133,8 +133,8 @@ public:
Square castle_rook_square(CastleRight f) const; Square castle_rook_square(CastleRight f) const;
// Bitboards for pinned pieces and discovered check candidates // Bitboards for pinned pieces and discovered check candidates
Bitboard discovered_check_candidates(Color c) const; Bitboard discovered_check_candidates() const;
Bitboard pinned_pieces(Color c) const; Bitboard pinned_pieces() const;
// Checking pieces and under check information // Checking pieces and under check information
Bitboard checkers() const; Bitboard checkers() const;
@ -230,7 +230,7 @@ private:
void undo_castle_move(Move m); void undo_castle_move(Move m);
template<bool FindPinned> template<bool FindPinned>
Bitboard hidden_checkers(Color c) const; Bitboard hidden_checkers() 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;

View file

@ -2023,7 +2023,7 @@ split_point_start: // At split points actual search starts from here
while ( (tte = TT.probe(pos.get_key())) != NULL while ( (tte = TT.probe(pos.get_key())) != NULL
&& tte->move() != MOVE_NONE && tte->move() != MOVE_NONE
&& pos.move_is_pl(tte->move()) && pos.move_is_pl(tte->move())
&& pos.pl_move_is_legal(tte->move(), pos.pinned_pieces(pos.side_to_move())) && pos.pl_move_is_legal(tte->move(), pos.pinned_pieces())
&& ply < PLY_MAX && ply < PLY_MAX
&& (!pos.is_draw<false>() || ply < 2)) && (!pos.is_draw<false>() || ply < 2))
{ {