1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-01 09:13:08 +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:
snicolet 2017-03-08 18:45:09 -08:00 committed by Joona Kiiski
parent d490bb9973
commit c3d2e6aba9
3 changed files with 17 additions and 7 deletions

View file

@ -740,7 +740,7 @@ namespace {
int kingDistance = distance<File>(pos.square<KING>(WHITE), pos.square<KING>(BLACK)) int kingDistance = distance<File>(pos.square<KING>(WHITE), pos.square<KING>(BLACK))
- distance<Rank>(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); bool bothFlanks = (pos.pieces(PAWN) & QueenSide) && (pos.pieces(PAWN) & KingSide);
// Compute the initiative bonus for the attacking side // 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_passer_pawns<BLACK, DoTrace>(pos, ei);
// Evaluate space for both sides, only during opening // 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) score += evaluate_space<WHITE>(pos, ei)
- evaluate_space<BLACK>(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(IMBALANCE, ei.me->imbalance());
Trace::add(PAWN, ei.pe->pawns_score()); Trace::add(PAWN, ei.pe->pawns_score());
Trace::add(MOBILITY, mobility[WHITE], mobility[BLACK]); 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) Trace::add(SPACE, evaluate_space<WHITE>(pos, ei)
, evaluate_space<BLACK>(pos, ei)); , evaluate_space<BLACK>(pos, ei));
Trace::add(TOTAL, score); Trace::add(TOTAL, score);

View file

@ -90,6 +90,7 @@ public:
Square ep_square() const; Square ep_square() const;
bool empty(Square s) const; bool empty(Square s) const;
template<PieceType Pt> int count(Color c) 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> const Square* squares(Color c) const;
template<PieceType Pt> Square square(Color c) const; template<PieceType Pt> Square square(Color c) const;
@ -154,6 +155,7 @@ public:
int rule50_count() const; int rule50_count() const;
Score psq_score() const; Score psq_score() const;
Value non_pawn_material(Color c) const; Value non_pawn_material(Color c) const;
Value non_pawn_material() const;
// Position consistency check, for debugging // Position consistency check, for debugging
bool pos_is_ok(int* failedStep = nullptr) const; 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)]; 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 { template<PieceType Pt> inline const Square* Position::squares(Color c) const {
return pieceList[make_piece(c, Pt)]; return pieceList[make_piece(c, Pt)];
} }
@ -330,6 +336,10 @@ inline Value Position::non_pawn_material(Color c) const {
return st->nonPawnMaterial[c]; return st->nonPawnMaterial[c];
} }
inline Value Position::non_pawn_material() const {
return st->nonPawnMaterial[WHITE] + st->nonPawnMaterial[BLACK];
}
inline int Position::game_ply() const { inline int Position::game_ply() const {
return gamePly; return gamePly;
} }

View file

@ -643,7 +643,7 @@ namespace {
// Step 4a. Tablebase probe // Step 4a. Tablebase probe
if (!rootNode && TB::Cardinality) 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 if ( piecesCount <= TB::Cardinality
&& (piecesCount < TB::Cardinality || depth >= TB::ProbeDepth) && (piecesCount < TB::Cardinality || depth >= TB::ProbeDepth)
@ -900,7 +900,7 @@ moves_loop: // When in check search starts from here
{ {
if ( !captureOrPromotion if ( !captureOrPromotion
&& !givesCheck && !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 // Move count based pruning
if (moveCountPruning) if (moveCountPruning)