From 7a762d1ff034c34ba7e0829f95d82606b3bf3f5a Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Tue, 17 Jan 2012 23:34:41 +0000 Subject: [PATCH] CuckooChess: Fixed broken handling of UCI "searchmoves". --- CuckooChess/src/uci/EngineControl.java | 7 +++---- CuckooChessEngine/src/chess/MoveGen.java | 9 +++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CuckooChess/src/uci/EngineControl.java b/CuckooChess/src/uci/EngineControl.java index 01edbcb..eec2d4b 100644 --- a/CuckooChess/src/uci/EngineControl.java +++ b/CuckooChess/src/uci/EngineControl.java @@ -129,8 +129,8 @@ public class EngineControl { computeTimeLimit(sPar); ponder = false; infinite = (maxTimeLimit < 0) && (maxDepth < 0) && (maxNodes < 0); - startThread(minTimeLimit, maxTimeLimit, maxDepth, maxNodes); searchMoves = sPar.searchMoves; + startThread(minTimeLimit, maxTimeLimit, maxDepth, maxNodes); } final public void startPonder(Position pos, List moves, SearchParams sPar) { @@ -229,9 +229,8 @@ public class EngineControl { sc.setStrength(strength, randomSeed); MoveGen.MoveList moves = moveGen.pseudoLegalMoves(pos); MoveGen.removeIllegal(pos, moves); - if ((searchMoves != null) && (searchMoves.size() > 0)) { - Arrays.asList(moves.m).retainAll(searchMoves); - } + if ((searchMoves != null) && (searchMoves.size() > 0)) + moves.filter(searchMoves); final MoveGen.MoveList srchMoves = moves; onePossibleMove = false; if ((srchMoves.size < 2) && !infinite) { diff --git a/CuckooChessEngine/src/chess/MoveGen.java b/CuckooChessEngine/src/chess/MoveGen.java index ee112b4..28cf3c8 100644 --- a/CuckooChessEngine/src/chess/MoveGen.java +++ b/CuckooChessEngine/src/chess/MoveGen.java @@ -18,6 +18,8 @@ package chess; +import java.util.List; + /** * * @author petero @@ -35,6 +37,13 @@ public final class MoveGen { m = new Move[MAX_MOVES]; this.size = 0; } + public final void filter(List searchMoves) { + int used = 0; + for (int i = 0; i < size; i++) + if (searchMoves.contains(m[i])) + m[used++] = m[i]; + size = used; + } } /**