summaryrefslogtreecommitdiff
path: root/engine/src/search.rs
diff options
context:
space:
mode:
authorMicha White <botahamec@outlook.com>2023-12-28 14:21:56 -0500
committerMicha White <botahamec@outlook.com>2023-12-28 14:21:56 -0500
commit07533a3b871baf3a202a4014fc2bd7b5cc2510a3 (patch)
tree53d7226d5fb0d53784fa9a5619c814f1eb4cafca /engine/src/search.rs
parent923aeb11d61b6e20ad33598ef7f44d0a6dfa6c15 (diff)
Add the best move to the transposition table
Diffstat (limited to 'engine/src/search.rs')
-rw-r--r--engine/src/search.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/engine/src/search.rs b/engine/src/search.rs
index 9c8ea26..4326ac6 100644
--- a/engine/src/search.rs
+++ b/engine/src/search.rs
@@ -42,8 +42,8 @@ pub fn negamax(
}
} else {
let table = task.transposition_table;
- if let Some(entry) = table.get(board, depth) {
- return (entry, None);
+ if let Some((entry, best_move)) = table.get(board, depth) {
+ return (entry, Some(best_move));
}
let turn = board.turn();
@@ -93,9 +93,14 @@ pub fn negamax(
}
}
- table.insert(board, best_eval, unsafe { NonZeroU8::new_unchecked(depth) });
+ // safety: we already checked that the list isn't empty, so there must
+ // be at least one move here
+ let best_move = unsafe { best_move.unwrap_unchecked() };
+ // safety: in the case of a zero depth, a different branch is taken
+ let depth = unsafe { NonZeroU8::new_unchecked(depth) };
+ table.insert(board, best_eval, best_move, depth);
- (best_eval, best_move)
+ (best_eval, Some(best_move))
}
}