summaryrefslogtreecommitdiff
path: root/engine/src/eval.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/eval.rs')
-rw-r--r--engine/src/eval.rs17
1 files changed, 10 insertions, 7 deletions
diff --git a/engine/src/eval.rs b/engine/src/eval.rs
index 4d7d540..01f07f6 100644
--- a/engine/src/eval.rs
+++ b/engine/src/eval.rs
@@ -171,17 +171,20 @@ pub fn negamax(
let turn = board.turn();
let mut best_eval = Evaluation::NULL_MIN;
let mut best_move = None;
- let moves: Arc<[Move]> = if let Some(moves) = allowed_moves {
- moves
- } else {
- PossibleMoves::moves(board).into_iter().collect()
- };
- if moves.is_empty() {
+ let sort_fn = |m: &Move| unsafe { sort_moves(m, board, table) };
+ let sorter: LazySort<Move, _, Evaluation, { PossibleMoves::MAX_POSSIBLE_MOVES }> =
+ if let Some(moves) = allowed_moves {
+ LazySort::new(moves.iter().cloned(), sort_fn)
+ } else {
+ let moves = PossibleMoves::moves(board);
+ LazySort::new(moves, sort_fn)
+ };
+
+ if sorter.is_empty() {
return (Evaluation::LOSS, None);
}
- let sorter = LazySort::new(&moves, |m| unsafe { sort_moves(m, board, table) });
for current_move in sorter.into_iter() {
if cancel_flag.load(std::sync::atomic::Ordering::Acquire) {
return (best_eval, best_move);