- 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++;
-}
-
-
-/// TranspositionTable::retrieve looks up the current position in the
-/// transposition table, and extracts the value, value type, depth and
-/// best move if the position is found. The return value is true if
-/// the position is found, and false if it isn't.
-
-bool TranspositionTable::retrieve(const Position &pos, Value *value,
- Depth *d, Move *move,
- ValueType *type) const {
- TTEntry *tte;
- bool found = false;
-
- tte = entries + int(pos.get_key() & (size - 1)) * 4;
- for (int i = 0; i < 4 && !found ; i++)
- if ((tte+i)->key() == pos.get_key())
- {
- tte = tte + i;
- found = true;
- }
- if (!found) {
- *move = MOVE_NONE;
- return false;
- }
- *value = tte->value();
- *type = tte->type();
- *d = tte->depth();
- *move = tte->move();
- return true;
-}
-
-
-/// TranspositionTable::new_search() is called at the beginning of every new
-/// search. It increments the "generation" variable, which is used to
-/// distinguish transposition table entries from previous searches from
-/// entries from the current search.
-
-void TranspositionTable::new_search() {