// Find an entry to be replaced according to the replacement strategy
TTEntry* replace = tte;
for (int i = 1; i < ClusterSize; ++i)
- if ( (( tte[i].genBound8 & 0xFC) == generation8 || tte[i].bound() == BOUND_EXACT)
+ if ( (( tte[i].genBound8 & 0xFC) == generation8)
- ((replace->genBound8 & 0xFC) == generation8)
- (tte[i].depth8 < replace->depth8) < 0)
replace = &tte[i];
return found = false, replace;
}
+
+
+/// Returns an approximation of the hashtable occupation during a search. The
+/// hash is x permill full, as per UCI protocol.
+
+int TranspositionTable::hashfull() const
+{
+ int cnt = 0;
+ for (int i = 0; i < 1000 / ClusterSize; i++)
+ {
+ const TTEntry* tte = &table[i].entry[0];
+ for (int j = 0; j < ClusterSize; j++)
+ if ((tte[j].genBound8 & 0xFC) == generation8)
+ cnt++;
+ }
+ return cnt;
+}