/// The TTEntry class is the class of transposition table entries
///
-/// A TTEntry needs 96 bits to be stored
+/// A TTEntry needs 128 bits to be stored
///
/// bit 0-31: key
/// bit 32-63: data
/// bit 64-79: value
/// bit 80-95: depth
+/// bit 96-111: static value
+/// bit 112-127: king danger value
///
/// the 32 bits of the data field are so defined
///
void clear();
void store(const Key posKey, Value v, ValueType type, Depth d, Move m, Value statV, Value kingD);
TTEntry* retrieve(const Key posKey) const;
- void prefetch(const Key posKey) const;
void new_search();
void insert_pv(const Position& pos, Move pv[]);
- void extract_pv(const Position& pos, Move pv[], const int PLY_MAX);
+ void extract_pv(const Position& pos, Move bestMove, Move pv[], const int PLY_MAX);
int full() const;
+ TTEntry* first_entry(const Key posKey) const;
private:
- inline TTEntry* first_entry(const Key posKey) const;
-
- // Be sure 'writes' is at least one cache line away
+ // Be sure 'overwrites' is at least one cache line away
// from read only variables.
unsigned char pad_before[64 - sizeof(unsigned)];
- unsigned writes; // heavy SMP read/write access here
+ unsigned overwrites; // heavy SMP read/write access here
unsigned char pad_after[64];
size_t size;
extern TranspositionTable TT;
+
+/// TranspositionTable::first_entry returns a pointer to the first
+/// entry of a cluster given a position. The low 32 bits of the key
+/// are used to get the index in the table.
+
+inline TTEntry* TranspositionTable::first_entry(const Key posKey) const {
+
+ return entries[uint32_t(posKey) & (size - 1)].data;
+}
+
#endif // !defined(TT_H_INCLUDED)