-/// TranspositionTable::store writes a new entry containing a position,
-/// a value, a value type, a search depth, and a best move to the
-/// transposition table. The transposition table is organized in clusters
-/// of four TTEntry objects, and when a new entry is written, it replaces
-/// the least valuable of the four entries in a cluster. A TTEntry t1 is
-/// considered to be more valuable than a TTEntry t2 if t1 is from the
-/// current search and t2 is from a previous search, or if the depth of t1
-/// is bigger than the depth of t2.
-
-void TranspositionTable::store(const Position &pos, Value v, Depth d,
- Move m, ValueType type) {
- TTEntry *tte, *replace;
-
- tte = replace = entries + int(pos.get_key() & (size - 1)) * 4;
- for(int i = 0; i < 4; i++) {
- if((tte+i)->key() == pos.get_key()) {
- if(m == MOVE_NONE)
- m = (tte+i)->move();
- *(tte+i) = TTEntry(pos.get_key(), v, type, d, m, generation);
- return;
- }
- if(replace->generation() == generation) {
- if((tte+i)->generation() != generation ||
- (tte+i)->depth() < replace->depth())
- replace = tte+i;
- }
- else if((tte+i)->generation() != generation &&
- (tte+i)->depth() < replace->depth())
- replace = tte+i;
- }
- *replace = TTEntry(pos.get_key(), v, type, d, m, generation);
- writes++;
-}