1
0
Fork 0

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
pull/1025/merge
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

@ -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);

View File

@ -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;
}

View File

@ -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)