// Pinners are sliders, not checkers, that give check when
// candidate pinned is removed.
- pinners = (rooks_and_queens(FindPinned ? opposite_color(c) : c) & RookPseudoAttacks[ksq])
- | (bishops_and_queens(FindPinned ? opposite_color(c) : c) & BishopPseudoAttacks[ksq]);
+ pinners = (pieces<ROOK_AND_QUEEN>(FindPinned ? opposite_color(c) : c) & RookPseudoAttacks[ksq])
+ | (pieces<BISHOP_AND_QUEEN>(FindPinned ? opposite_color(c) : c) & BishopPseudoAttacks[ksq]);
if (FindPinned && pinners)
pinners &= ~st->checkersBB;
Bitboard Position::attacks_to(Square s) const {
- return (pawn_attacks(BLACK, s) & pawns(WHITE))
- | (pawn_attacks(WHITE, s) & pawns(BLACK))
- | (piece_attacks<KNIGHT>(s) & pieces_of_type(KNIGHT))
- | (piece_attacks<ROOK>(s) & rooks_and_queens())
- | (piece_attacks<BISHOP>(s) & bishops_and_queens())
- | (piece_attacks<KING>(s) & pieces_of_type(KING));
+ return (pawn_attacks(BLACK, s) & pieces<PAWN>(WHITE))
+ | (pawn_attacks(WHITE, s) & pieces<PAWN>(BLACK))
+ | (piece_attacks<KNIGHT>(s) & pieces<KNIGHT>())
+ | (piece_attacks<ROOK>(s) & pieces<ROOK_AND_QUEEN>())
+ | (piece_attacks<BISHOP>(s) & pieces<BISHOP_AND_QUEEN>())
+ | (piece_attacks<KING>(s) & pieces<KING>());
}
/// Position::piece_attacks_square() tests whether the piece on square f
Color us = color_of_piece_on(f);
clear_bit(&occ, f);
set_bit(&occ, t);
- Bitboard xray = ( (rook_attacks_bb(s, occ) & rooks_and_queens())
- |(bishop_attacks_bb(s, occ) & bishops_and_queens())) & pieces_of_color(us);
+ Bitboard xray = ( (rook_attacks_bb(s, occ) & pieces<ROOK_AND_QUEEN>())
+ |(bishop_attacks_bb(s, occ) & pieces<BISHOP_AND_QUEEN>())) & pieces_of_color(us);
// If we have attacks we need to verify that are caused by our move
// and are not already existent ones.
clear_bit(&b, capsq);
set_bit(&b, to);
- return !(rook_attacks_bb(ksq, b) & rooks_and_queens(them))
- && !(bishop_attacks_bb(ksq, b) & bishops_and_queens(them));
+ return !(rook_attacks_bb(ksq, b) & pieces<ROOK_AND_QUEEN>(them))
+ && !(bishop_attacks_bb(ksq, b) & pieces<BISHOP_AND_QUEEN>(them));
}
// If the moving piece is a king, check whether the destination
clear_bit(&b, from);
clear_bit(&b, capsq);
set_bit(&b, to);
- return (rook_attacks_bb(ksq, b) & rooks_and_queens(us))
- ||(bishop_attacks_bb(ksq, b) & bishops_and_queens(us));
+ return (rook_attacks_bb(ksq, b) & pieces<ROOK_AND_QUEEN>(us))
+ ||(bishop_attacks_bb(ksq, b) & pieces<BISHOP_AND_QUEEN>(us));
}
return false;
if (Piece != QUEEN && bit_is_set(dcCandidates, from))
{
if (Piece != ROOK)
- (*pCheckersBB) |= (piece_attacks<ROOK>(ksq) & rooks_and_queens(side_to_move()));
+ (*pCheckersBB) |= (piece_attacks<ROOK>(ksq) & pieces<ROOK_AND_QUEEN>(side_to_move()));
if (Piece != BISHOP)
- (*pCheckersBB) |= (piece_attacks<BISHOP>(ksq) & bishops_and_queens(side_to_move()));
+ (*pCheckersBB) |= (piece_attacks<BISHOP>(ksq) & pieces<BISHOP_AND_QUEEN>(side_to_move()));
}
}
// Set en passant square, only if moved pawn can be captured
if (abs(int(to) - int(from)) == 16)
{
- if (pawn_attacks(us, from + (us == WHITE ? DELTA_N : DELTA_S)) & pawns(them))
+ if (pawn_attacks(us, from + (us == WHITE ? DELTA_N : DELTA_S)) & pieces<PAWN>(them))
{
st->epSquare = Square((int(from) + int(to)) / 2);
key ^= zobEp[st->epSquare];
while (true)
{
clear_bit(&occ, from);
- attackers = (rook_attacks_bb(to, occ) & rooks_and_queens())
- | (bishop_attacks_bb(to, occ) & bishops_and_queens())
- | (piece_attacks<KNIGHT>(to) & knights())
- | (piece_attacks<KING>(to) & kings())
- | (pawn_attacks(WHITE, to) & pawns(BLACK))
- | (pawn_attacks(BLACK, to) & pawns(WHITE));
+ attackers = (rook_attacks_bb(to, occ) & pieces<ROOK_AND_QUEEN>())
+ | (bishop_attacks_bb(to, occ) & pieces<BISHOP_AND_QUEEN>())
+ | (piece_attacks<KNIGHT>(to) & pieces<KNIGHT>())
+ | (piece_attacks<KING>(to) & pieces<KING>())
+ | (pawn_attacks(WHITE, to) & pieces<PAWN>(BLACK))
+ | (pawn_attacks(BLACK, to) & pieces<PAWN>(WHITE));
if (from != SQ_NONE)
break;
// and scan for new X-ray attacks behind the attacker.
b = stmAttackers & pieces_of_type(pt);
occ ^= (b & (~b + 1));
- attackers |= (rook_attacks_bb(to, occ) & rooks_and_queens())
- | (bishop_attacks_bb(to, occ) & bishops_and_queens());
+ attackers |= (rook_attacks_bb(to, occ) & pieces<ROOK_AND_QUEEN>())
+ | (bishop_attacks_bb(to, occ) & pieces<BISHOP_AND_QUEEN>());
attackers &= occ;
for (Color c = WHITE; c <= BLACK; c++)
{
- b = pawns(c);
+ b = pieces<PAWN>(c);
while(b)
{
s = pop_1st_bit(&b);
bool Position::is_draw() const {
// Draw by material?
- if ( !pawns()
+ if ( !pieces<PAWN>()
&& (non_pawn_material(WHITE) + non_pawn_material(BLACK) <= BishopValueMidgame))
return true;