mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Helper functions to count material for both sides
Syntactic sugar: helper functions to count material or pieces for both sides. No functional change Closes #1025
This commit is contained in:
parent
d490bb9973
commit
c3d2e6aba9
3 changed files with 17 additions and 7 deletions
|
@ -179,7 +179,7 @@ namespace {
|
|||
S( 9, 10), S( 2, 10), S( 1, -8), S(-20,-12),
|
||||
S(-20,-12), S( 1, -8), S( 2, 10), S( 9, 10)
|
||||
};
|
||||
|
||||
|
||||
// Protector[PieceType-2][distance] contains a protecting bonus for our king,
|
||||
// indexed by piece type and distance between the piece and the king.
|
||||
const Score Protector[4][8] = {
|
||||
|
@ -302,7 +302,7 @@ namespace {
|
|||
int mob = popcount(b & ei.mobilityArea[Us]);
|
||||
|
||||
mobility[Us] += MobilityBonus[Pt-2][mob];
|
||||
|
||||
|
||||
// Bonus for this piece as a king protector
|
||||
score += Protector[Pt-2][distance(s, pos.square<KING>(Us))];
|
||||
|
||||
|
@ -740,7 +740,7 @@ namespace {
|
|||
|
||||
int kingDistance = distance<File>(pos.square<KING>(WHITE), pos.square<KING>(BLACK))
|
||||
- distance<Rank>(pos.square<KING>(WHITE), pos.square<KING>(BLACK));
|
||||
int pawns = pos.count<PAWN>(WHITE) + pos.count<PAWN>(BLACK);
|
||||
int pawns = pos.count<PAWN>();
|
||||
bool bothFlanks = (pos.pieces(PAWN) & QueenSide) && (pos.pieces(PAWN) & KingSide);
|
||||
|
||||
// Compute the initiative bonus for the attacking side
|
||||
|
@ -847,7 +847,7 @@ Value Eval::evaluate(const Position& pos) {
|
|||
- evaluate_passer_pawns<BLACK, DoTrace>(pos, ei);
|
||||
|
||||
// Evaluate space for both sides, only during opening
|
||||
if (pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK) >= 12222)
|
||||
if (pos.non_pawn_material() >= 12222)
|
||||
score += evaluate_space<WHITE>(pos, ei)
|
||||
- evaluate_space<BLACK>(pos, ei);
|
||||
|
||||
|
@ -870,7 +870,7 @@ Value Eval::evaluate(const Position& pos) {
|
|||
Trace::add(IMBALANCE, ei.me->imbalance());
|
||||
Trace::add(PAWN, ei.pe->pawns_score());
|
||||
Trace::add(MOBILITY, mobility[WHITE], mobility[BLACK]);
|
||||
if (pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK) >= 12222)
|
||||
if (pos.non_pawn_material() >= 12222)
|
||||
Trace::add(SPACE, evaluate_space<WHITE>(pos, ei)
|
||||
, evaluate_space<BLACK>(pos, ei));
|
||||
Trace::add(TOTAL, score);
|
||||
|
|
|
@ -90,6 +90,7 @@ public:
|
|||
Square ep_square() const;
|
||||
bool empty(Square s) const;
|
||||
template<PieceType Pt> int count(Color c) const;
|
||||
template<PieceType Pt> int count() const;
|
||||
template<PieceType Pt> const Square* squares(Color c) const;
|
||||
template<PieceType Pt> Square square(Color c) const;
|
||||
|
||||
|
@ -154,6 +155,7 @@ public:
|
|||
int rule50_count() const;
|
||||
Score psq_score() const;
|
||||
Value non_pawn_material(Color c) const;
|
||||
Value non_pawn_material() const;
|
||||
|
||||
// Position consistency check, for debugging
|
||||
bool pos_is_ok(int* failedStep = nullptr) const;
|
||||
|
@ -236,6 +238,10 @@ template<PieceType Pt> inline int Position::count(Color c) const {
|
|||
return pieceCount[make_piece(c, Pt)];
|
||||
}
|
||||
|
||||
template<PieceType Pt> inline int Position::count() const {
|
||||
return pieceCount[make_piece(WHITE, Pt)] + pieceCount[make_piece(BLACK, Pt)];
|
||||
}
|
||||
|
||||
template<PieceType Pt> inline const Square* Position::squares(Color c) const {
|
||||
return pieceList[make_piece(c, Pt)];
|
||||
}
|
||||
|
@ -330,6 +336,10 @@ inline Value Position::non_pawn_material(Color c) const {
|
|||
return st->nonPawnMaterial[c];
|
||||
}
|
||||
|
||||
inline Value Position::non_pawn_material() const {
|
||||
return st->nonPawnMaterial[WHITE] + st->nonPawnMaterial[BLACK];
|
||||
}
|
||||
|
||||
inline int Position::game_ply() const {
|
||||
return gamePly;
|
||||
}
|
||||
|
|
|
@ -643,7 +643,7 @@ namespace {
|
|||
// Step 4a. Tablebase probe
|
||||
if (!rootNode && TB::Cardinality)
|
||||
{
|
||||
int piecesCount = pos.count<ALL_PIECES>(WHITE) + pos.count<ALL_PIECES>(BLACK);
|
||||
int piecesCount = pos.count<ALL_PIECES>();
|
||||
|
||||
if ( piecesCount <= TB::Cardinality
|
||||
&& (piecesCount < TB::Cardinality || depth >= TB::ProbeDepth)
|
||||
|
@ -900,7 +900,7 @@ moves_loop: // When in check search starts from here
|
|||
{
|
||||
if ( !captureOrPromotion
|
||||
&& !givesCheck
|
||||
&& (!pos.advanced_pawn_push(move) || pos.non_pawn_material(WHITE) + pos.non_pawn_material(BLACK) >= 5000))
|
||||
&& (!pos.advanced_pawn_push(move) || pos.non_pawn_material() >= 5000))
|
||||
{
|
||||
// Move count based pruning
|
||||
if (moveCountPruning)
|
||||
|
|
Loading…
Add table
Reference in a new issue