+/// TranspositionTable::refresh() updates the 'generation' value of the TTEntry
+/// to avoid aging. Normally called after a TT hit.
+
+inline void TranspositionTable::refresh(const TTEntry* tte) const {
+
+ const_cast<TTEntry*>(tte)->set_generation(generation);
+}
+
+
+/// A simple hash table used to store pawns and material configurations. It is
+/// basically just an array of Entry objects. Without cluster concept, overwrite
+/// policy nor resizing.
+
+template<class Entry, int HashSize>
+struct HashTable {
+
+ typedef HashTable<Entry, HashSize> Base;
+
+ HashTable() {
+
+ entries = new (std::nothrow) Entry[HashSize];
+ if (!entries)
+ {
+ std::cerr << "Failed to allocate " << HashSize * sizeof(Entry)
+ << " bytes for hash table." << std::endl;
+ ::exit(EXIT_FAILURE);
+ }
+ memset(entries, 0, HashSize * sizeof(Entry));
+ }
+
+ virtual ~HashTable() { delete [] entries; }
+
+ Entry* probe(Key key) const { return entries + ((uint32_t)key & (HashSize - 1)); }
+ void prefetch(Key key) const { ::prefetch((char*)probe(key)); }
+
+private:
+ Entry* entries;
+};