]> git.sesse.net Git - stockfish/blobdiff - src/tt.h
Prefer names to numbers in storm code
[stockfish] / src / tt.h
index 8ec09a7c8e75865eaaf1251d1c2aaa2ed48b58a4..89c95d550468e59f8aec727948193ebd7d5e7865 100644 (file)
--- a/src/tt.h
+++ b/src/tt.h
@@ -38,28 +38,30 @@ struct TTEntry {
   Move  move()  const      { return (Move )move16; }
   Value value() const      { return (Value)value16; }
   Value eval_value() const { return (Value)evalValue; }
-  Depth depth() const      { return (Depth)(depth8) + DEPTH_NONE; }
+  Depth depth() const      { return (Depth)depth8; }
   Bound bound() const      { return (Bound)(genBound8 & 0x3); }
 
-private:
-  friend class TranspositionTable;
+  void save(Key k, Value v, Bound b, Depth d, Move m, Value ev, uint8_t g) {
 
-  void save(uint16_t k, Value v, Bound b, Depth d, Move m, uint8_t g, Value ev) {
+    if (m || (k >> 48) != key16) // Preserve any existing move for the same position
+        move16 = (uint16_t)m;
 
-    key16     = (uint16_t)k;
-    move16    = (uint16_t)m;
-    value16   = (int16_t)v;
-    evalValue = (int16_t)ev;
-    genBound8 = (uint8_t)(g | b);
-    depth8    = (uint8_t)(d - DEPTH_NONE);
+    key16      = (uint16_t)(k >> 48);
+    value16    = (int16_t)v;
+    evalValue  = (int16_t)ev;
+    genBound8  = (uint8_t)(g | b);
+    depth8     = (int8_t)d;
   }
 
+private:
+  friend class TranspositionTable;
+
   uint16_t key16;
   uint16_t move16;
   int16_t  value16;
   int16_t  evalValue;
   uint8_t  genBound8;
-  uint8_t  depth8;
+  int8_t   depth8;
 };
 
 /// TTCluster is a 32 bytes cluster of TT entries consisting of:
@@ -67,7 +69,7 @@ private:
 /// 3 x TTEntry (3 x 10 bytes)
 /// padding     (2 bytes)
 
-const unsigned TTClusterSize = 3;
+static const unsigned TTClusterSize = 3;
 
 struct TTCluster {
   TTEntry entry[TTClusterSize];
@@ -84,19 +86,18 @@ class TranspositionTable {
 
 public:
  ~TranspositionTable() { free(mem); }
-  void new_search() { generation += 4; } // Lower 2 bits are used by Bound
-
-  const TTEntry* probe(const Key key) const;
+  void new_search() { generation8 += 4; } // Lower 2 bits are used by Bound
+  uint8_t generation() const { return generation8; }
+  TTEntry* probe(const Key key, bool& found) const;
   TTEntry* first_entry(const Key key) const;
   void resize(size_t mbSize);
   void clear();
-  void store(const Key key, Value v, Bound type, Depth d, Move m, Value statV);
 
 private:
   size_t clusterCount;
   TTCluster* table;
   void* mem;
-  uint8_t generation; // Size must be not bigger than TTEntry::genBound8
+  uint8_t generation8; // Size must be not bigger than TTEntry::genBound8
 };
 
 extern TranspositionTable TT;