mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43: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:
parent
4894231ff7
commit
69f4954df1
4 changed files with 22 additions and 25 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue