-/// 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;
+/// transposition table. Returns a pointer to the TTEntry or NULL
+/// if position is not found.
+
+TTEntry* TranspositionTable::retrieve(const Key posKey) const {
+
+ uint32_t posKey32 = posKey >> 32;
+ TTEntry* tte = first_entry(posKey);
+
+ for (int i = 0; i < ClusterSize; i++, tte++)
+ if (tte->key() == posKey32)
+ return tte;
+
+ return NULL;