]> git.sesse.net Git - stockfish/blobdiff - src/tt.h
Remember when TT value equals static evaluation value
[stockfish] / src / tt.h
index 03ce1f553df77f9d5e46cf5232602bd7b956b13d..a820d94ac5181efa74789258c474a167c507ec9e 100644 (file)
--- a/src/tt.h
+++ b/src/tt.h
 //// Types
 ////
 
-/// The TTEntry class is the class of transposition table entries.
+/// The TTEntry class is the class of transposition table entries
+///
+/// A TTEntry needs 128 bits to be stored
+///
+/// bit    0-63: key
+/// bit   64-95: data
+/// bit  96-111: value
+/// bit 112-127: depth
+///
+/// the 32 bits of the data field are so defined
+///
+/// bit  0-16: move
+/// bit    17: stored value equals static value
+/// bit 18-19: not used
+/// bit 20-22: value type
+/// bit 23-31: generation
 
 class TTEntry {
 
@@ -43,10 +58,12 @@ public:
   TTEntry(Key k, Value v, ValueType t, Depth d, Move m, int generation);
   Key key() const { return key_; }
   Depth depth() const { return Depth(depth_); }
-  Move move() const { return Move(data & 0x7FFFF); }
+  Move move() const { return Move(data & 0x1FFFF); }
   Value value() const { return Value(value_); }
-  ValueType type() const { return ValueType((data >> 20) & 3); }
+  ValueType type() const { return ValueType((data >> 20) & 7); }
   int generation() const { return (data >> 23); }
+  bool staticValue() const { return ((data >> 17) & 1); }
+  void setStaticValue() { data |= (1 << 17); }
 
 private:
   Key key_;
@@ -66,8 +83,8 @@ public:
   ~TranspositionTable();
   void set_size(unsigned mbSize);
   void clear();
-  void store(const Position &pos, Value v, Depth d, Move m, ValueType type);
-  const TTEntry* retrieve(const Position &pos) const;
+  TTEntry* store(const Position &pos, Value v, Depth d, Move m, ValueType type);
+  TTEntry* retrieve(const Position &pos) const;
   void new_search();
   void insert_pv(const Position &pos, Move pv[]);
   int full();