Where variable names are explicitly incorrect, I feel morally obligated to at least
suggest an alternative. There are many, but these two are especially egregious.
No functional change.
const Color Them = (Us == WHITE ? BLACK : WHITE);
const Direction Up = (Us == WHITE ? NORTH : SOUTH);
- const Direction Left = (Us == WHITE ? NORTH_WEST : SOUTH_EAST);
- const Direction Right = (Us == WHITE ? NORTH_EAST : SOUTH_WEST);
const Bitboard TRank3BB = (Us == WHITE ? Rank3BB : Rank6BB);
Bitboard b, weak, defended, nonPawnEnemies, stronglyProtected, safeThreats;
b = pos.pieces(Us, PAWN)
& (~attackedBy[Them][ALL_PIECES] | attackedBy[Us][ALL_PIECES]);
- safeThreats = (shift<Right>(b) | shift<Left>(b)) & weak;
+ safeThreats = pos.pawn_attacks<Us>(b) & weak;
score += ThreatBySafePawn * popcount(safeThreats);
}
& (attackedBy[Us][ALL_PIECES] | ~attackedBy[Them][ALL_PIECES]);
// Bonus for safe pawn threats on the next move
- b = (shift<Left>(b) | shift<Right>(b))
+ b = pos.pawn_attacks<Us>(b)
& pos.pieces(Them)
& ~attackedBy[Us][PAWN];
const Bitboard TRank7BB = (Us == WHITE ? Rank7BB : Rank2BB);
const Bitboard TRank3BB = (Us == WHITE ? Rank3BB : Rank6BB);
const Direction Up = (Us == WHITE ? NORTH : SOUTH);
- const Direction Right = (Us == WHITE ? NORTH_EAST : SOUTH_WEST);
- const Direction Left = (Us == WHITE ? NORTH_WEST : SOUTH_EAST);
+ const Direction UpRight = (Us == WHITE ? NORTH_EAST : SOUTH_WEST);
+ const Direction UpLeft = (Us == WHITE ? NORTH_WEST : SOUTH_EAST);
Bitboard emptySquares;
if (Type == EVASIONS)
emptySquares &= target;
- Bitboard b1 = shift<Right>(pawnsOn7) & enemies;
- Bitboard b2 = shift<Left >(pawnsOn7) & enemies;
- Bitboard b3 = shift<Up >(pawnsOn7) & emptySquares;
+ Bitboard b1 = shift<UpRight>(pawnsOn7) & enemies;
+ Bitboard b2 = shift<UpLeft >(pawnsOn7) & enemies;
+ Bitboard b3 = shift<Up >(pawnsOn7) & emptySquares;
Square ksq = pos.square<KING>(Them);
while (b1)
- moveList = make_promotions<Type, Right>(moveList, pop_lsb(&b1), ksq);
+ moveList = make_promotions<Type, UpRight>(moveList, pop_lsb(&b1), ksq);
while (b2)
- moveList = make_promotions<Type, Left >(moveList, pop_lsb(&b2), ksq);
+ moveList = make_promotions<Type, UpLeft >(moveList, pop_lsb(&b2), ksq);
while (b3)
- moveList = make_promotions<Type, Up >(moveList, pop_lsb(&b3), ksq);
+ moveList = make_promotions<Type, Up >(moveList, pop_lsb(&b3), ksq);
}
// Standard and en-passant captures
if (Type == CAPTURES || Type == EVASIONS || Type == NON_EVASIONS)
{
- Bitboard b1 = shift<Right>(pawnsNotOn7) & enemies;
- Bitboard b2 = shift<Left >(pawnsNotOn7) & enemies;
+ Bitboard b1 = shift<UpRight>(pawnsNotOn7) & enemies;
+ Bitboard b2 = shift<UpLeft >(pawnsNotOn7) & enemies;
while (b1)
{
Square to = pop_lsb(&b1);
- *moveList++ = make_move(to - Right, to);
+ *moveList++ = make_move(to - UpRight, to);
}
while (b2)
{
Square to = pop_lsb(&b2);
- *moveList++ = make_move(to - Left, to);
+ *moveList++ = make_move(to - UpLeft, to);
}
if (pos.ep_square() != SQ_NONE)
const Color Them = (Us == WHITE ? BLACK : WHITE);
const Direction Up = (Us == WHITE ? NORTH : SOUTH);
- const Direction Right = (Us == WHITE ? NORTH_EAST : SOUTH_WEST);
- const Direction Left = (Us == WHITE ? NORTH_WEST : SOUTH_EAST);
Bitboard b, neighbours, stoppers, doubled, supported, phalanx;
Bitboard lever, leverPush;
e->passedPawns[Us] = e->pawnAttacksSpan[Us] = e->weakUnopposed[Us] = 0;
e->semiopenFiles[Us] = 0xFF;
e->kingSquares[Us] = SQ_NONE;
- e->pawnAttacks[Us] = shift<Right>(ourPawns) | shift<Left>(ourPawns);
+ e->pawnAttacks[Us] = pos.pawn_attacks<Us>(ourPawns);
e->pawnsOnSquares[Us][BLACK] = popcount(ourPawns & DarkSquares);
e->pawnsOnSquares[Us][WHITE] = pos.count<PAWN>(Us) - e->pawnsOnSquares[Us][BLACK];
Bitboard attacks_from(PieceType pt, Square s) const;
template<PieceType> Bitboard attacks_from(Square s) const;
template<PieceType> Bitboard attacks_from(Square s, Color c) const;
+ template<Color> Bitboard pawn_attacks(Bitboard b) const;
Bitboard slider_blockers(Bitboard sliders, Square s, Bitboard& pinners) const;
// Properties of moves
return attacks_bb(pt, s, byTypeBB[ALL_PIECES]);
}
+template<Color c>
+inline Bitboard Position::pawn_attacks(Bitboard b) const {
+ return c == WHITE ? shift<NORTH_WEST>(b) | shift<NORTH_EAST>(b)
+ : shift<SOUTH_WEST>(b) | shift<SOUTH_EAST>(b);
+}
+
inline Bitboard Position::attackers_to(Square s) const {
return attackers_to(s, byTypeBB[ALL_PIECES]);
}