]> git.sesse.net Git - stockfish/blobdiff - src/book.cpp
Fix MSVC warning on streampos to size_t conversion
[stockfish] / src / book.cpp
index 720471a3688ba2cb4a82c0bb2ff124d797efa328..1dd5aa6dadb4675cec1be733b3fb5380cdaab8cf 100644 (file)
@@ -383,7 +383,7 @@ bool Book::open(const char* fName) {
       return false; // Silently fail if the file is not found
 
   // Get the book size in number of entries, we are already at the end of file
-  size = tellg() / sizeof(BookEntry);
+  size = (size_t)tellg() / sizeof(BookEntry);
 
   if (!good())
   {
@@ -404,7 +404,8 @@ Move Book::probe(const Position& pos, const string& fName, bool pickBest) {
 
   BookEntry e;
   uint16_t best = 0;
-  unsigned sum = 0, bookMove = 0;
+  unsigned sum = 0;
+  Move move = MOVE_NONE;
   uint64_t key = book_key(pos);
 
   if (fileName != fName && !open(fName.c_str()))
@@ -422,10 +423,10 @@ Move Book::probe(const Position& pos, const string& fName, bool pickBest) {
       // with lower score. Note that first entry is always chosen.
       if (   (RKiss.rand<unsigned>() % sum < e.count)
           || (pickBest && e.count == best))
-          bookMove = e.move;
+          move = Move(e.move);
   }
 
-  if (!bookMove)
+  if (!move)
       return MOVE_NONE;
 
   // A PolyGlot book move is encoded as follows:
@@ -438,16 +439,13 @@ Move Book::probe(const Position& pos, const string& fName, bool pickBest) {
   // move is a promotion we have to convert to our representation, in all the
   // other cases we can directly compare with a Move after having masked out
   // the special Move's flags (bit 14-15) that are not supported by PolyGlot.
-  int promotion = (bookMove >> 12) & 7;
+  int pt = (move >> 12) & 7;
+  if (pt)
+      move = make_promotion(from_sq(move), to_sq(move), PieceType(pt + 1));
 
-  if (promotion)
-      bookMove = make_promotion_move(move_from(Move(bookMove)),
-                                     move_to(Move(bookMove)),
-                                     PieceType(promotion + 1));
-
-  // Convert bookMove to our internal Move format (and verify it is legal)
+  // Add 'special move' flags and verify it is legal
   for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
-      if (bookMove == unsigned(ml.move() & ~(3 << 14)))
+      if (move == (ml.move() & 0x3FFF))
           return ml.move();
 
   return MOVE_NONE;
@@ -460,30 +458,30 @@ Move Book::probe(const Position& pos, const string& fName, bool pickBest) {
 
 void Book::binary_search(uint64_t key) {
 
-  size_t left, right, mid;
+  size_t low, high, mid;
   BookEntry e;
 
-  left = 0;
-  right = size - 1;
+  low = 0;
+  high = size - 1;
 
-  assert(left <= right);
+  assert(low <= high);
 
-  while (left < right && good())
+  while (low < high && good())
   {
-      mid = (left + right) / 2;
+      mid = (low + high) / 2;
 
-      assert(mid >= left && mid < right);
+      assert(mid >= low && mid < high);
 
       seekg(mid * sizeof(BookEntry), ios_base::beg);
       *this >> e;
 
       if (key <= e.key)
-          right = mid;
+          high = mid;
       else
-          left = mid + 1;
+          low = mid + 1;
   }
 
-  assert(left == right);
+  assert(low == high);
 
-  seekg(left * sizeof(BookEntry), ios_base::beg);
+  seekg(low * sizeof(BookEntry), ios_base::beg);
 }