diff options
author | 2013-08-26 07:44:41 +0000 | |
---|---|---|
committer | 2013-08-26 07:44:42 +0000 | |
commit | 918336b7e790e108c109457e89c07f4dab5309c0 (patch) | |
tree | 0b80c0d48f519139624fb768c37cc6985278e517 /java/src | |
parent | 649d040c5a94085ea16090cad8295909626afae9 (diff) | |
parent | bb5b84a82630bc2309c9ae866d43c7934768bb2e (diff) | |
download | latinime-918336b7e790e108c109457e89c07f4dab5309c0.tar.gz latinime-918336b7e790e108c109457e89c07f4dab5309c0.tar.xz latinime-918336b7e790e108c109457e89c07f4dab5309c0.zip |
Merge "[Refactor] Add DictDecoder.getTerminalPosition."
Diffstat (limited to 'java/src')
5 files changed, 25 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java index e55bb1664..29f114662 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java @@ -323,7 +323,7 @@ public final class BinaryDictDecoderUtils { /** * Reads and returns the PtNode count out of a buffer and forwards the pointer. */ - public static int readPtNodeCount(final DictBuffer dictBuffer) { + /* package */ static int readPtNodeCount(final DictBuffer dictBuffer) { final int msb = dictBuffer.readUnsignedByte(); if (FormatSpec.MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT >= msb) { return msb; diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java index 245f0038b..a08e28c8b 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java @@ -169,7 +169,7 @@ public final class BinaryDictIOUtils { * @throws UnsupportedFormatException if the format of the file is not recognized. */ @UsedForTesting - public static int getTerminalPosition(final Ver3DictDecoder dictDecoder, + /* package */ static int getTerminalPosition(final Ver3DictDecoder dictDecoder, final String word) throws IOException, UnsupportedFormatException { final DictBuffer dictBuffer = dictDecoder.getDictBuffer(); if (word == null) return FormatSpec.NOT_VALID_WORD; diff --git a/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java index 5be506999..d5fcacc09 100644 --- a/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java +++ b/java/src/com/android/inputmethod/latin/makedict/DictDecoder.java @@ -58,6 +58,19 @@ public interface DictDecoder { public FusionDictionary readDictionaryBinary(final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException; + /** + * Gets the address of the last PtNode of the exact matching word in the dictionary. + * If no match is found, returns NOT_VALID_WORD. + * + * @param word the word we search for. + * @return the address of the terminal node. + * @throws IOException if the file can't be read. + * @throws UnsupportedFormatException if the format of the file is not recognized. + */ + @UsedForTesting + public int getTerminalPosition(final String word) + throws IOException, UnsupportedFormatException; + // Flags for DictionaryBufferFactory. public static final int USE_READONLY_BYTEBUFFER = 0x01000000; public static final int USE_BYTEARRAY = 0x02000000; diff --git a/java/src/com/android/inputmethod/latin/makedict/DynamicBinaryDictIOUtils.java b/java/src/com/android/inputmethod/latin/makedict/DynamicBinaryDictIOUtils.java index 77dba8853..bf3d19101 100644 --- a/java/src/com/android/inputmethod/latin/makedict/DynamicBinaryDictIOUtils.java +++ b/java/src/com/android/inputmethod/latin/makedict/DynamicBinaryDictIOUtils.java @@ -60,7 +60,7 @@ public final class DynamicBinaryDictIOUtils { final DictBuffer dictBuffer = dictDecoder.getDictBuffer(); dictBuffer.position(0); final FileHeader header = dictDecoder.readHeader(); - final int wordPosition = BinaryDictIOUtils.getTerminalPosition(dictDecoder, word); + final int wordPosition = dictDecoder.getTerminalPosition(word); if (wordPosition == FormatSpec.NOT_VALID_WORD) return; dictBuffer.position(wordPosition); @@ -263,7 +263,7 @@ public final class DynamicBinaryDictIOUtils { final DictBuffer dictBuffer = dictDecoder.getDictBuffer(); if (bigramStrings != null) { for (final WeightedString bigram : bigramStrings) { - int position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, bigram.mWord); + int position = dictDecoder.getTerminalPosition(bigram.mWord); if (position == FormatSpec.NOT_VALID_WORD) { // TODO: figure out what is the correct thing to do here. } else { diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java index 51e101f94..77e6393ee 100644 --- a/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java +++ b/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java @@ -309,4 +309,12 @@ public class Ver3DictDecoder implements DictDecoder { } return BinaryDictDecoderUtils.readDictionaryBinary(this, dict); } + + @Override + public int getTerminalPosition(String word) throws IOException, UnsupportedFormatException { + if (mDictBuffer == null) { + openDictBuffer(); + } + return BinaryDictIOUtils.getTerminalPosition(this, word); + } } |