From 50ef52737683b4ab8874f39ecda960651dbc8b4c Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Sat, 21 Jan 2012 08:51:01 +0000 Subject: [PATCH] DroidFish: Reinitialize tablebases when activity is started. --- .../src/org/petero/droidfish/ChessBoard.java | 2 +- DroidFish/src/org/petero/droidfish/DroidFish.java | 5 +++++ .../droidfish/engine/DroidComputerPlayer.java | 15 +++------------ .../petero/droidfish/engine/ExternalEngine.java | 2 +- .../petero/droidfish/engine/UCIEngineBase.java | 2 +- .../droidfish/gamelogic/DroidChessController.java | 2 +- .../src/org/petero/droidfish/gtb/GtbProbe.java | 4 ++-- DroidFish/src/org/petero/droidfish/gtb/Probe.java | 6 +++--- 8 files changed, 17 insertions(+), 21 deletions(-) diff --git a/DroidFish/src/org/petero/droidfish/ChessBoard.java b/DroidFish/src/org/petero/droidfish/ChessBoard.java index 2b16e9d..80b336e 100644 --- a/DroidFish/src/org/petero/droidfish/ChessBoard.java +++ b/DroidFish/src/org/petero/droidfish/ChessBoard.java @@ -105,7 +105,7 @@ public class ChessBoard extends View { labelPaint = new Paint(); labelPaint.setAntiAlias(true); - + decorationPaint = new Paint(); decorationPaint.setAntiAlias(true); diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java index dd76224..923b6e0 100644 --- a/DroidFish/src/org/petero/droidfish/DroidFish.java +++ b/DroidFish/src/org/petero/droidfish/DroidFish.java @@ -208,6 +208,7 @@ public class DroidFish extends Activity implements GUIInterface { if (ctrl != null) ctrl.shutdownEngine(); ctrl = new DroidChessController(this, gameTextListener, pgnOptions); + egtbForceReload = true; readPrefs(); ctrl.newGame(gameMode); { @@ -700,8 +701,12 @@ public class DroidFish extends Activity implements GUIInterface { ctrl.setBookOptions(options); } + private boolean egtbForceReload = false; + private final void setEgtbOptions() { ctrl.setEgtbOptions(new EGTBOptions(egtbOptions)); + Probe.getInstance().setPath(egtbOptions.gtbPath, egtbForceReload); + egtbForceReload = false; } private final void setEgtbHints(int sq) { diff --git a/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java b/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java index caeb84a..7924cc6 100644 --- a/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java +++ b/DroidFish/src/org/petero/droidfish/engine/DroidComputerPlayer.java @@ -35,7 +35,6 @@ import org.petero.droidfish.gamelogic.TextIO; import org.petero.droidfish.gamelogic.UndoInfo; import org.petero.droidfish.gamelogic.SearchListener.PvInfo; import org.petero.droidfish.gtb.Probe; -import org.petero.droidfish.gtb.Probe.ProbeResult; import android.content.Context; @@ -49,7 +48,6 @@ public class DroidComputerPlayer { private final SearchListener listener; private final DroidBook book; private EGTBOptions egtbOptions; - private final Probe gtbProbe; /** Set when "ucinewgame" needs to be sent. */ private boolean newGame = false; @@ -245,7 +243,6 @@ public class DroidComputerPlayer { this.listener = listener; book = DroidBook.getInstance(); egtbOptions = new EGTBOptions(); - gtbProbe = Probe.getInstance(); engineState = new EngineState(); searchRequest = null; } @@ -272,10 +269,9 @@ public class DroidComputerPlayer { public final void setBookOptions(BookOptions options) { book.setOptions(options); } - + public final void setEgtbOptions(EGTBOptions options) { egtbOptions = options; - gtbProbe.setPath(options.gtbPath); } /** Return all book moves, both as a formatted string and as a list of moves. */ @@ -283,10 +279,6 @@ public class DroidComputerPlayer { return book.getAllBookMoves(pos); } - public final ProbeResult egtbProbe(Position pos) { - return gtbProbe.probeHard(pos); - } - /** Get engine reported name. */ public final synchronized String getEngineName() { return engineName; @@ -339,9 +331,8 @@ public class DroidComputerPlayer { /** Decide what moves to search. Filters out non-optimal moves if tablebases are used. */ private final ArrayList movesToSearch(SearchRequest sr) { ArrayList moves = null; - if (egtbOptions.rootProbe) { - moves = gtbProbe.findOptimal(sr.currPos); - } + if (egtbOptions.rootProbe) + moves = Probe.getInstance().findOptimal(sr.currPos); if (moves != null) { sr.searchMoves = moves; } else { diff --git a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java index b4c4d67..1a91da8 100644 --- a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java @@ -101,7 +101,7 @@ public class ExternalEngine extends UCIEngineBase { } }); exitThread.start(); - + // Start a thread to read stdin stdInThread = new Thread(new Runnable() { @Override diff --git a/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java b/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java index 0af6b49..e916d75 100644 --- a/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java +++ b/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java @@ -78,7 +78,7 @@ public abstract class UCIEngineBase implements UCIEngine { public void clearOptions() { allOptions.clear(); } - + @Override public void registerOption(String optName) { allOptions.add(optName); diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java index 645c89e..674e1e2 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java @@ -719,7 +719,7 @@ public class DroidChessController { } }); } - + @Override public void reportEngineError(final String errMsg) { gui.runOnUIThread(new Runnable() { diff --git a/DroidFish/src/org/petero/droidfish/gtb/GtbProbe.java b/DroidFish/src/org/petero/droidfish/gtb/GtbProbe.java index 885f8f2..7576db1 100644 --- a/DroidFish/src/org/petero/droidfish/gtb/GtbProbe.java +++ b/DroidFish/src/org/petero/droidfish/gtb/GtbProbe.java @@ -29,8 +29,8 @@ class GtbProbe { GtbProbe() { } - final synchronized void setPath(String tbPath) { - if (!currTbPath.equals(tbPath)) { + final synchronized void setPath(String tbPath, boolean forceReload) { + if (forceReload || !currTbPath.equals(tbPath)) { currTbPath = tbPath; init(tbPath); } diff --git a/DroidFish/src/org/petero/droidfish/gtb/Probe.java b/DroidFish/src/org/petero/droidfish/gtb/Probe.java index 92338d5..7dd5664 100644 --- a/DroidFish/src/org/petero/droidfish/gtb/Probe.java +++ b/DroidFish/src/org/petero/droidfish/gtb/Probe.java @@ -50,9 +50,9 @@ public class Probe { whitePieces = new byte[65]; blackPieces = new byte[65]; } - - public void setPath(String tbPath) { - gtb.setPath(tbPath); + + public void setPath(String tbPath, boolean forceReload) { + gtb.setPath(tbPath, forceReload); } public static final class ProbeResult {