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

Reformat max_threat()

Helper function should just know how to find the
biggest piece type in a bitboard. All the threat
logic and data shoud be in evaluate_threats().

This nicely separates the scope of the two functions
in a more consistent way and simplifies the code.

No functional change.
This commit is contained in:
Marco Costalba 2014-10-25 07:03:42 +02:00 committed by Joona Kiiski
parent 8d62ece945
commit 4f6b1bf3be

View file

@ -490,24 +490,21 @@ namespace {
return score;
}
// max_threat() is a helper function to calculate the score of a set of threats.
// The set of threatened pieces is in the "targets" parameter, and we return
// the value of the threat on the biggest piece.
template<Color Us> FORCE_INLINE
Score max_threat(const Bitboard targets, const Position& pos, const Score threat_values[]) {
// max_piece_type() is a helper function used by evaluate_threats() to get
// the value of the biggest PieceType of color C in 'target' bitboard.
const Color Them = (Us == WHITE ? BLACK : WHITE);
template<Color C>
inline PieceType max_piece_type(const Position& pos, const Bitboard target) {
PieceType threat = PAWN;
if (targets & pos.pieces(Them, KNIGHT)) threat = KNIGHT;
if (targets & pos.pieces(Them, BISHOP)) threat = BISHOP;
if (targets & pos.pieces(Them, ROOK)) threat = ROOK;
if (targets & pos.pieces(Them, QUEEN)) threat = QUEEN;
assert(target & (pos.pieces(C) ^ pos.pieces(C, KING)));
return threat_values[threat];
PieceType pt;
for (pt = QUEEN; !(target & pos.pieces(C, pt)); --pt) {}
return pt;
}
// evaluate_threats() assigns bonuses according to the type of attacking piece
// and the type of attacked one.
@ -516,18 +513,18 @@ namespace {
const Color Them = (Us == WHITE ? BLACK : WHITE);
Bitboard b, weakEnemies, protectedEnemies;
Score score = SCORE_ZERO;
enum { Minor, Major };
// Protected enemies
Bitboard b, weakEnemies, protectedEnemies;
Score score = SCORE_ZERO;
// Enemies defended by a pawn and under our attack by a minor piece
protectedEnemies = (pos.pieces(Them) ^ pos.pieces(Them, PAWN))
& ei.attackedBy[Them][PAWN]
& (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]);
if (protectedEnemies)
score += max_threat<Us>(protectedEnemies, pos, Threat[Minor]);
score += Threat[Minor][max_piece_type<Them>(pos, protectedEnemies)];
// Enemies not defended by a pawn and under our attack
weakEnemies = pos.pieces(Them)
@ -539,11 +536,11 @@ namespace {
{
b = weakEnemies & (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]);
if (b)
score += max_threat<Us>(b, pos, Threat[Minor]);
score += Threat[Minor][max_piece_type<Them>(pos, b)];
b = weakEnemies & (ei.attackedBy[Us][ROOK] | ei.attackedBy[Us][QUEEN]);
if (b)
score += max_threat<Us>(b, pos, Threat[Major]);
score += Threat[Major][max_piece_type<Them>(pos, b)];
b = weakEnemies & ~ei.attackedBy[Them][ALL_PIECES];
if (b)