Retire total_piece_count()
authorMarco Costalba <mcostalba@gmail.com>
Sun, 30 Nov 2014 20:35:22 +0000 (20:35 +0000)
committerJoona Kiiski <joona.kiiski@gmail.com>
Sun, 30 Nov 2014 20:37:24 +0000 (20:37 +0000)
We really don't need to uglify in this way
our nice count() API with this ad-hoc hack.

So remove the hack and use the already
existing infrastructure.

No functional change.

Resolves #134

src/position.h
src/search.cpp

index 6667de7..b66cc67 100644 (file)
@@ -24,9 +24,9 @@
 #include <cstddef>
 
 #include "bitboard.h"
-#include "bitcount.h"
 #include "types.h"
 
+
 /// The checkInfo struct is initialized at c'tor time and keeps info used
 /// to detect if a move gives check.
 class Position;
@@ -100,7 +100,6 @@ public:
   bool empty(Square s) const;
   template<PieceType Pt> int count(Color c) const;
   template<PieceType Pt> const Square* list(Color c) const;
-  int total_piece_count() const;
 
   // Castling
   int can_castle(Color c) const;
@@ -358,10 +357,6 @@ inline int Position::rule50_count() const {
   return st->rule50;
 }
 
-inline int Position::total_piece_count() const {
-  return HasPopCnt ? popcount<Full>(pieces()) : pieceCount[WHITE][ALL_PIECES];
-}
-
 inline bool Position::opposite_bishops() const {
 
   return   pieceCount[WHITE][BISHOP] == 1
@@ -412,8 +407,7 @@ inline void Position::put_piece(Square s, Color c, PieceType pt) {
   byColorBB[c] |= s;
   index[s] = pieceCount[c][pt]++;
   pieceList[c][pt][index[s]] = s;
-  if (!HasPopCnt)
-      pieceCount[WHITE][ALL_PIECES]++;
+  pieceCount[c][ALL_PIECES]++;
 }
 
 inline void Position::move_piece(Square from, Square to, Color c, PieceType pt) {
@@ -444,8 +438,7 @@ inline void Position::remove_piece(Square s, Color c, PieceType pt) {
   index[lastSquare] = index[s];
   pieceList[c][pt][index[lastSquare]] = lastSquare;
   pieceList[c][pt][pieceCount[c][pt]] = SQ_NONE;
-  if (!HasPopCnt)
-      pieceCount[WHITE][ALL_PIECES]--;
+  pieceCount[c][ALL_PIECES]--;
 }
 
 #endif // #ifndef POSITION_H_INCLUDED
index 0005391..0130e85 100644 (file)
@@ -205,7 +205,7 @@ void Search::think() {
   else
   {
       // Check Tablebases at root
-      int piecesCnt = RootPos.total_piece_count();
+      int piecesCnt = RootPos.count<ALL_PIECES>(WHITE) + RootPos.count<ALL_PIECES>(BLACK);
       TBCardinality = Options["SyzygyProbeLimit"];
       TBProbeDepth = Options["SyzygyProbeDepth"] * ONE_PLY;
       if (TBCardinality > Tablebases::TBLargest)
@@ -470,6 +470,7 @@ namespace {
     bool inCheck, givesCheck, singularExtensionNode, improving;
     bool captureOrPromotion, dangerous, doFullDepthSearch;
     int moveCount, quietCount;
+    int piecesCnt;
 
     // Step 1. Initialize node
     Thread* thisThread = pos.this_thread();
@@ -548,10 +549,12 @@ namespace {
     }
 
     // Step 4a. Tablebase probe
+    piecesCnt = pos.count<ALL_PIECES>(WHITE) + pos.count<ALL_PIECES>(BLACK);
+
     if (   !RootNode
-        && pos.total_piece_count() <= TBCardinality
-        && ( pos.total_piece_count() < TBCardinality || depth >= TBProbeDepth )
-        && pos.rule50_count() == 0)
+        &&  piecesCnt <= TBCardinality
+        && (piecesCnt < TBCardinality || depth >= TBProbeDepth)
+        &&  pos.rule50_count() == 0)
     {
         int found, v = Tablebases::probe_wdl(pos, &found);