Loading java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java +0 −2 Original line number Diff line number Diff line Loading @@ -229,8 +229,6 @@ final public class BinaryDictionaryGetter { try { // Read the version of the file final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(f); dictDecoder.openDictBuffer( new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory()); final FileHeader header = dictDecoder.readHeader(); final String version = header.mDictionaryOptions.mAttributes.get(VERSION_KEY); Loading java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java +1 −9 Original line number Diff line number Diff line Loading @@ -559,17 +559,9 @@ public final class BinaryDictDecoderUtils { * @return the created (or merged) dictionary. */ @UsedForTesting public static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder, /* package */ static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder, final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException { // if the buffer has not been opened, open the buffer with bytebuffer. if (dictDecoder.getDictBuffer() == null) dictDecoder.openDictBuffer( new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory()); if (dictDecoder.getDictBuffer() == null) { MakedictLog.e("Cannot open the buffer"); } // Read header final FileHeader fileHeader = dictDecoder.readHeader(); Loading java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java +14 −13 Original line number Diff line number Diff line Loading @@ -521,8 +521,8 @@ public final class BinaryDictIOUtils { final File file, final long offset, final long length) throws FileNotFoundException, IOException, UnsupportedFormatException { final byte[] buffer = new byte[HEADER_READING_BUFFER_SIZE]; final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file); dictDecoder.openDictBuffer(new DictDecoder.DictionaryBufferFactory() { final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file, new DictDecoder.DictionaryBufferFactory() { @Override public DictBuffer getDictionaryBuffer(File file) throws FileNotFoundException, IOException { Loading @@ -534,7 +534,8 @@ public final class BinaryDictIOUtils { inStream.close(); } } }); } ); return dictDecoder.readHeader(); } Loading java/src/com/android/inputmethod/latin/makedict/DictDecoder.java +20 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,26 @@ public interface DictDecoder { */ public CharGroupInfo readPtNode(final int ptNodePos, final FormatOptions formatOptions); /** * Reads a buffer and returns the memory representation of the dictionary. * * This high-level method takes a buffer and reads its contents, populating a * FusionDictionary structure. The optional dict argument is an existing dictionary to * which words from the buffer should be added. If it is null, a new dictionary is created. * * @param dict an optional dictionary to add words to, or null. * @return the created (or merged) dictionary. */ @UsedForTesting public FusionDictionary readDictionaryBinary(final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException; // Flags for DictionaryBufferFactory. public static final int USE_READONLY_BYTEBUFFER = 0x01000000; public static final int USE_BYTEARRAY = 0x02000000; public static final int USE_WRITABLE_BYTEBUFFER = 0x04000000; public static final int MASK_DICTBUFFER = 0x0F000000; public interface DictionaryBufferFactory { public DictBuffer getDictionaryBuffer(final File file) throws FileNotFoundException, IOException; Loading java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java +38 −7 Original line number Diff line number Diff line Loading @@ -165,31 +165,53 @@ public class Ver3DictDecoder implements DictDecoder { } private final File mDictionaryBinaryFile; private final DictionaryBufferFactory mBufferFactory; private DictBuffer mDictBuffer; public Ver3DictDecoder(final File file) { this(file, USE_READONLY_BYTEBUFFER); } public Ver3DictDecoder(final File file, final int factoryFlag) { mDictionaryBinaryFile = file; mDictBuffer = null; if ((factoryFlag & MASK_DICTBUFFER) == USE_READONLY_BYTEBUFFER) { mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory(); } else if ((factoryFlag & MASK_DICTBUFFER) == USE_BYTEARRAY) { mBufferFactory = new DictionaryBufferFromByteArrayFactory(); } else if ((factoryFlag & MASK_DICTBUFFER) == USE_WRITABLE_BYTEBUFFER) { mBufferFactory = new DictionaryBufferFromWritableByteBufferFactory(); } else { mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory(); } } public Ver3DictDecoder(final File file, final DictionaryBufferFactory factory) { mDictionaryBinaryFile = file; mBufferFactory = factory; } public void openDictBuffer(final DictDecoder.DictionaryBufferFactory factory) throws FileNotFoundException, IOException { mDictBuffer = factory.getDictionaryBuffer(mDictionaryBinaryFile); public void openDictBuffer() throws FileNotFoundException, IOException { mDictBuffer = mBufferFactory.getDictionaryBuffer(mDictionaryBinaryFile); } public DictBuffer getDictBuffer() { /* package */ DictBuffer getDictBuffer() { return mDictBuffer; } @UsedForTesting public DictBuffer openAndGetDictBuffer(final DictDecoder.DictionaryBufferFactory factory) throws FileNotFoundException, IOException { openDictBuffer(factory); /* package */ DictBuffer openAndGetDictBuffer() throws FileNotFoundException, IOException { openDictBuffer(); return getDictBuffer(); } @Override public FileHeader readHeader() throws IOException, UnsupportedFormatException { if (mDictBuffer == null) { openDictBuffer(); } final int version = HeaderReader.readVersion(mDictBuffer); final int optionsFlags = HeaderReader.readOptionFlags(mDictBuffer); Loading Loading @@ -278,4 +300,13 @@ public class Ver3DictDecoder implements DictDecoder { return new CharGroupInfo(ptNodePos, addressPointer, flags, characters, frequency, parentAddress, childrenAddress, shortcutTargets, bigrams); } @Override public FusionDictionary readDictionaryBinary(final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException { if (mDictBuffer == null) { openDictBuffer(); } return BinaryDictDecoderUtils.readDictionaryBinary(this, dict); } } Loading
java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java +0 −2 Original line number Diff line number Diff line Loading @@ -229,8 +229,6 @@ final public class BinaryDictionaryGetter { try { // Read the version of the file final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(f); dictDecoder.openDictBuffer( new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory()); final FileHeader header = dictDecoder.readHeader(); final String version = header.mDictionaryOptions.mAttributes.get(VERSION_KEY); Loading
java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java +1 −9 Original line number Diff line number Diff line Loading @@ -559,17 +559,9 @@ public final class BinaryDictDecoderUtils { * @return the created (or merged) dictionary. */ @UsedForTesting public static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder, /* package */ static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder, final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException { // if the buffer has not been opened, open the buffer with bytebuffer. if (dictDecoder.getDictBuffer() == null) dictDecoder.openDictBuffer( new Ver3DictDecoder.DictionaryBufferFromReadOnlyByteBufferFactory()); if (dictDecoder.getDictBuffer() == null) { MakedictLog.e("Cannot open the buffer"); } // Read header final FileHeader fileHeader = dictDecoder.readHeader(); Loading
java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java +14 −13 Original line number Diff line number Diff line Loading @@ -521,8 +521,8 @@ public final class BinaryDictIOUtils { final File file, final long offset, final long length) throws FileNotFoundException, IOException, UnsupportedFormatException { final byte[] buffer = new byte[HEADER_READING_BUFFER_SIZE]; final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file); dictDecoder.openDictBuffer(new DictDecoder.DictionaryBufferFactory() { final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file, new DictDecoder.DictionaryBufferFactory() { @Override public DictBuffer getDictionaryBuffer(File file) throws FileNotFoundException, IOException { Loading @@ -534,7 +534,8 @@ public final class BinaryDictIOUtils { inStream.close(); } } }); } ); return dictDecoder.readHeader(); } Loading
java/src/com/android/inputmethod/latin/makedict/DictDecoder.java +20 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,26 @@ public interface DictDecoder { */ public CharGroupInfo readPtNode(final int ptNodePos, final FormatOptions formatOptions); /** * Reads a buffer and returns the memory representation of the dictionary. * * This high-level method takes a buffer and reads its contents, populating a * FusionDictionary structure. The optional dict argument is an existing dictionary to * which words from the buffer should be added. If it is null, a new dictionary is created. * * @param dict an optional dictionary to add words to, or null. * @return the created (or merged) dictionary. */ @UsedForTesting public FusionDictionary readDictionaryBinary(final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException; // Flags for DictionaryBufferFactory. public static final int USE_READONLY_BYTEBUFFER = 0x01000000; public static final int USE_BYTEARRAY = 0x02000000; public static final int USE_WRITABLE_BYTEBUFFER = 0x04000000; public static final int MASK_DICTBUFFER = 0x0F000000; public interface DictionaryBufferFactory { public DictBuffer getDictionaryBuffer(final File file) throws FileNotFoundException, IOException; Loading
java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java +38 −7 Original line number Diff line number Diff line Loading @@ -165,31 +165,53 @@ public class Ver3DictDecoder implements DictDecoder { } private final File mDictionaryBinaryFile; private final DictionaryBufferFactory mBufferFactory; private DictBuffer mDictBuffer; public Ver3DictDecoder(final File file) { this(file, USE_READONLY_BYTEBUFFER); } public Ver3DictDecoder(final File file, final int factoryFlag) { mDictionaryBinaryFile = file; mDictBuffer = null; if ((factoryFlag & MASK_DICTBUFFER) == USE_READONLY_BYTEBUFFER) { mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory(); } else if ((factoryFlag & MASK_DICTBUFFER) == USE_BYTEARRAY) { mBufferFactory = new DictionaryBufferFromByteArrayFactory(); } else if ((factoryFlag & MASK_DICTBUFFER) == USE_WRITABLE_BYTEBUFFER) { mBufferFactory = new DictionaryBufferFromWritableByteBufferFactory(); } else { mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory(); } } public Ver3DictDecoder(final File file, final DictionaryBufferFactory factory) { mDictionaryBinaryFile = file; mBufferFactory = factory; } public void openDictBuffer(final DictDecoder.DictionaryBufferFactory factory) throws FileNotFoundException, IOException { mDictBuffer = factory.getDictionaryBuffer(mDictionaryBinaryFile); public void openDictBuffer() throws FileNotFoundException, IOException { mDictBuffer = mBufferFactory.getDictionaryBuffer(mDictionaryBinaryFile); } public DictBuffer getDictBuffer() { /* package */ DictBuffer getDictBuffer() { return mDictBuffer; } @UsedForTesting public DictBuffer openAndGetDictBuffer(final DictDecoder.DictionaryBufferFactory factory) throws FileNotFoundException, IOException { openDictBuffer(factory); /* package */ DictBuffer openAndGetDictBuffer() throws FileNotFoundException, IOException { openDictBuffer(); return getDictBuffer(); } @Override public FileHeader readHeader() throws IOException, UnsupportedFormatException { if (mDictBuffer == null) { openDictBuffer(); } final int version = HeaderReader.readVersion(mDictBuffer); final int optionsFlags = HeaderReader.readOptionFlags(mDictBuffer); Loading Loading @@ -278,4 +300,13 @@ public class Ver3DictDecoder implements DictDecoder { return new CharGroupInfo(ptNodePos, addressPointer, flags, characters, frequency, parentAddress, childrenAddress, shortcutTargets, bigrams); } @Override public FusionDictionary readDictionaryBinary(final FusionDictionary dict) throws FileNotFoundException, IOException, UnsupportedFormatException { if (mDictBuffer == null) { openDictBuffer(); } return BinaryDictDecoderUtils.readDictionaryBinary(this, dict); } }