-
- // evaluate_pieces() assigns bonuses and penalties to all the
- // pieces of a given color.
-
- template<Color Us, bool Trace>
- Score evaluate_pieces(const Position& pos, EvalInfo& ei, Score* mobility) {
-
- const Color Them = (Us == WHITE ? BLACK : WHITE);
-
- // Do not include in mobility squares protected by enemy pawns or occupied by our pieces
- const Bitboard mobilityArea = ~(ei.attackedBy[Them][PAWN] | pos.pieces(Us, PAWN, KING));
-
- Score score = evaluate_pieces<KNIGHT, Us, Trace>(pos, ei, mobility, mobilityArea)
- + evaluate_pieces<BISHOP, Us, Trace>(pos, ei, mobility, mobilityArea)
- + evaluate_pieces<ROOK, Us, Trace>(pos, ei, mobility, mobilityArea)
- + evaluate_pieces<QUEEN, Us, Trace>(pos, ei, mobility, mobilityArea);
-
- // Sum up all attacked squares (updated in evaluate_pieces)
- ei.attackedBy[Us][ALL_PIECES] = ei.attackedBy[Us][PAWN] | ei.attackedBy[Us][KNIGHT]
- | ei.attackedBy[Us][BISHOP] | ei.attackedBy[Us][ROOK]
- | ei.attackedBy[Us][QUEEN] | ei.attackedBy[Us][KING];
- if (Trace)
- Tracing::terms[Us][Tracing::MOBILITY] = apply_weight(mobility[Us], Weights[Mobility]);
-
- return score;