From 41e7a6922cd151699b08b0731fedc0a17a608f87 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Tue, 11 Sep 2012 22:44:49 +0000 Subject: [PATCH] DroidFish: Reduced opening book memory usage. --- .../src/org/petero/droidfish/book/CtgBook.java | 10 +++++----- .../org/petero/droidfish/book/DroidBook.java | 6 +++--- .../org/petero/droidfish/book/IOpeningBook.java | 4 ++-- .../org/petero/droidfish/book/InternalBook.java | 17 +++++++++-------- .../src/org/petero/droidfish/book/NullBook.java | 4 ++-- .../org/petero/droidfish/book/PolyglotBook.java | 5 ++--- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/DroidFish/src/org/petero/droidfish/book/CtgBook.java b/DroidFish/src/org/petero/droidfish/book/CtgBook.java index bc8ab20..cfa9433 100644 --- a/DroidFish/src/org/petero/droidfish/book/CtgBook.java +++ b/DroidFish/src/org/petero/droidfish/book/CtgBook.java @@ -62,7 +62,7 @@ class CtgBook implements IOpeningBook { } @Override - public List getBookEntries(Position pos) { + public ArrayList getBookEntries(Position pos) { RandomAccessFile ctgF = null; RandomAccessFile ctbF = null; RandomAccessFile ctoF = null; @@ -75,7 +75,7 @@ class CtgBook implements IOpeningBook { CtoFile cto = new CtoFile(ctoF); CtgFile ctg = new CtgFile(ctgF, ctb, cto); - List ret = null; + ArrayList ret = null; PositionData pd = ctg.getPositionData(pos); if (pd != null) { boolean mirrorColor = pd.mirrorColor; @@ -86,7 +86,7 @@ class CtgBook implements IOpeningBook { pd.pos.makeMove(be.move, ui); PositionData movePd = ctg.getPositionData(pd.pos); pd.pos.unMakeMove(be.move, ui); - double weight = be.weight; + float weight = be.weight; if (movePd == null) { // System.out.printf("%s : no pos\n", TextIO.moveToUCIString(be.move)); weight = 0; @@ -417,8 +417,8 @@ class CtgBook implements IOpeningBook { case 0x02: ent.weight = 0; break; // ? case 0x03: ent.weight = 32; break; // !! case 0x04: ent.weight = 0; break; // ?? - case 0x05: ent.weight = 0.5; break; // !? - case 0x06: ent.weight = 0.125; break; // ?! + case 0x05: ent.weight = 0.5f; break; // !? + case 0x06: ent.weight = 0.125f; break; // ?! case 0x08: ent.weight = 1000000; break; // Only move } entries.add(ent); diff --git a/DroidFish/src/org/petero/droidfish/book/DroidBook.java b/DroidFish/src/org/petero/droidfish/book/DroidBook.java index 57894b8..1926e90 100644 --- a/DroidFish/src/org/petero/droidfish/book/DroidBook.java +++ b/DroidFish/src/org/petero/droidfish/book/DroidBook.java @@ -37,9 +37,9 @@ import org.petero.droidfish.gamelogic.Pair; * @author petero */ public final class DroidBook { - static class BookEntry { + static final class BookEntry { Move move; - double weight; + float weight; BookEntry(Move move) { this.move = move; weight = 1; @@ -117,7 +117,7 @@ public final class DroidBook { boolean localized) { StringBuilder ret = new StringBuilder(); ArrayList bookMoveList = new ArrayList(); - List bookMoves = getBook().getBookEntries(pos); + ArrayList bookMoves = getBook().getBookEntries(pos); // Check legality if (bookMoves != null) { diff --git a/DroidFish/src/org/petero/droidfish/book/IOpeningBook.java b/DroidFish/src/org/petero/droidfish/book/IOpeningBook.java index 6943363..2249ccf 100644 --- a/DroidFish/src/org/petero/droidfish/book/IOpeningBook.java +++ b/DroidFish/src/org/petero/droidfish/book/IOpeningBook.java @@ -18,7 +18,7 @@ package org.petero.droidfish.book; -import java.util.List; +import java.util.ArrayList; import org.petero.droidfish.book.DroidBook.BookEntry; import org.petero.droidfish.gamelogic.Position; @@ -31,5 +31,5 @@ interface IOpeningBook { void setOptions(BookOptions options); /** Get all book entries for a position. */ - List getBookEntries(Position pos); + ArrayList getBookEntries(Position pos); } diff --git a/DroidFish/src/org/petero/droidfish/book/InternalBook.java b/DroidFish/src/org/petero/droidfish/book/InternalBook.java index 75b9079..b755789 100644 --- a/DroidFish/src/org/petero/droidfish/book/InternalBook.java +++ b/DroidFish/src/org/petero/droidfish/book/InternalBook.java @@ -23,7 +23,6 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; import org.petero.droidfish.book.DroidBook.BookEntry; import org.petero.droidfish.gamelogic.ChessParseError; @@ -33,8 +32,10 @@ import org.petero.droidfish.gamelogic.Position; import org.petero.droidfish.gamelogic.TextIO; import org.petero.droidfish.gamelogic.UndoInfo; +import android.util.FloatMath; + final class InternalBook implements IOpeningBook { - private static Map> bookMap; + private static HashMap> bookMap; private static int numBookMoves = -1; InternalBook() { @@ -58,15 +59,15 @@ final class InternalBook implements IOpeningBook { } @Override - public List getBookEntries(Position pos) { + public ArrayList getBookEntries(Position pos) { initInternalBook(); - List ents = bookMap.get(pos.zobristHash()); + ArrayList ents = bookMap.get(pos.zobristHash()); if (ents == null) return null; - List ret = new ArrayList(); + ArrayList ret = new ArrayList(); for (BookEntry be : ents) { BookEntry be2 = new BookEntry(be.move); - be2.weight = Math.sqrt(be.weight) * 100 + 1; + be2.weight = FloatMath.sqrt(be.weight) * 100 + 1; ret.add(be2); } return ret; @@ -80,7 +81,7 @@ final class InternalBook implements IOpeningBook { if (numBookMoves >= 0) return; // long t0 = System.currentTimeMillis(); - bookMap = new HashMap>(); + bookMap = new HashMap>(); numBookMoves = 0; try { InputStream inStream = getClass().getResourceAsStream("/book.bin"); @@ -131,7 +132,7 @@ final class InternalBook implements IOpeningBook { /** Add a move to a position in the opening book. */ private final void addToBook(Position pos, Move moveToAdd) { - List ent = bookMap.get(pos.zobristHash()); + ArrayList ent = bookMap.get(pos.zobristHash()); if (ent == null) { ent = new ArrayList(); bookMap.put(pos.zobristHash(), ent); diff --git a/DroidFish/src/org/petero/droidfish/book/NullBook.java b/DroidFish/src/org/petero/droidfish/book/NullBook.java index da9e126..0cd026c 100644 --- a/DroidFish/src/org/petero/droidfish/book/NullBook.java +++ b/DroidFish/src/org/petero/droidfish/book/NullBook.java @@ -18,7 +18,7 @@ package org.petero.droidfish.book; -import java.util.List; +import java.util.ArrayList; import org.petero.droidfish.book.DroidBook.BookEntry; import org.petero.droidfish.gamelogic.Position; @@ -31,7 +31,7 @@ class NullBook implements IOpeningBook { } @Override - public List getBookEntries(Position pos) { + public ArrayList getBookEntries(Position pos) { return null; } diff --git a/DroidFish/src/org/petero/droidfish/book/PolyglotBook.java b/DroidFish/src/org/petero/droidfish/book/PolyglotBook.java index 87f3a06..e95fefe 100644 --- a/DroidFish/src/org/petero/droidfish/book/PolyglotBook.java +++ b/DroidFish/src/org/petero/droidfish/book/PolyglotBook.java @@ -23,7 +23,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; -import java.util.List; import org.petero.droidfish.book.DroidBook.BookEntry; import org.petero.droidfish.gamelogic.Move; @@ -373,7 +372,7 @@ class PolyglotBook implements IOpeningBook { } @Override - public final List getBookEntries(Position pos) { + public final ArrayList getBookEntries(Position pos) { try { RandomAccessFile f = new RandomAccessFile(bookFile, "r"); long numEntries = f.length() / 16; @@ -396,7 +395,7 @@ class PolyglotBook implements IOpeningBook { } // Read all entries with matching hash key - List ret = new ArrayList(); + ArrayList ret = new ArrayList(); long entNo = hi; while (entNo < numEntries) { readEntry(f, entNo, ent);