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:
parent
d490bb9973
commit
c3d2e6aba9
3 changed files with 17 additions and 7 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue