-/// key: 32 bit
-/// move: 16 bit
-/// bound type: 8 bit
-/// generation: 8 bit
-/// value: 16 bit
-/// depth: 16 bit
-/// static value: 16 bit
-/// static margin: 16 bit
-
-class TTEntry {
-
-public:
- void save(uint32_t k, Value v, Bound b, Depth d, Move m, int g, Value ev, Value em) {
-
- key32 = (uint32_t)k;
- move16 = (uint16_t)m;
- bound = (uint8_t)b;
- generation8 = (uint8_t)g;
- value16 = (int16_t)v;
- depth16 = (int16_t)d;
- evalValue = (int16_t)ev;
- evalMargin = (int16_t)em;
- }
- void set_generation(int g) { generation8 = (uint8_t)g; }
-
- uint32_t key() const { return key32; }
- Depth depth() const { return (Depth)depth16; }
- Move move() const { return (Move)move16; }
- Value value() const { return (Value)value16; }
- Bound type() const { return (Bound)bound; }
- int generation() const { return (int)generation8; }
- Value eval_value() const { return (Value)evalValue; }
- Value eval_margin() const { return (Value)evalMargin; }
+/// key 16 bit
+/// move 16 bit
+/// value 16 bit
+/// eval value 16 bit
+/// generation 5 bit
+/// pv node 1 bit
+/// bound type 2 bit
+/// depth 8 bit
+
+struct TTEntry {
+
+ Move move() const { return (Move )move16; }
+ Value value() const { return (Value)value16; }
+ Value eval() const { return (Value)eval16; }
+ Depth depth() const { return (Depth)(depth8 * int(ONE_PLY)); }
+ bool is_pv() const { return (bool)(genBound8 & 0x4); }
+ Bound bound() const { return (Bound)(genBound8 & 0x3); }
+ void save(Key k, Value v, bool pv, Bound b, Depth d, Move m, Value ev);