Skip to content

Commit

Permalink
Helper functions to count material for both sides
Browse files Browse the repository at this point in the history
Syntactic sugar: helper functions to count material or pieces for both sides.

No functional change

Closes #1025
  • Loading branch information
snicolet authored and zamar committed Mar 9, 2017
1 parent d490bb9 commit c3d2e6a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
10 changes: 5 additions & 5 deletions src/evaluate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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] = {
Expand Down Expand Up @@ -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))];

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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);

Expand All @@ -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);
Expand Down
10 changes: 10 additions & 0 deletions src/position.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ class Position {
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;

Expand Down Expand Up @@ -154,6 +155,7 @@ class Position {
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;
Expand Down Expand Up @@ -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)];
}
Expand Down Expand Up @@ -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;
}
Expand Down
4 changes: 2 additions & 2 deletions src/search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -900,7 +900,7 @@ namespace {
{
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)
Expand Down

0 comments on commit c3d2e6a

Please sign in to comment.