Merge "[Refactor] Add DictDecoder.getTerminalPosition."
commit
918336b7e7
|
@ -323,7 +323,7 @@ public final class BinaryDictDecoderUtils {
|
||||||
/**
|
/**
|
||||||
* Reads and returns the PtNode count out of a buffer and forwards the pointer.
|
* 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();
|
final int msb = dictBuffer.readUnsignedByte();
|
||||||
if (FormatSpec.MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT >= msb) {
|
if (FormatSpec.MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT >= msb) {
|
||||||
return msb;
|
return msb;
|
||||||
|
|
|
@ -169,7 +169,7 @@ public final class BinaryDictIOUtils {
|
||||||
* @throws UnsupportedFormatException if the format of the file is not recognized.
|
* @throws UnsupportedFormatException if the format of the file is not recognized.
|
||||||
*/
|
*/
|
||||||
@UsedForTesting
|
@UsedForTesting
|
||||||
public static int getTerminalPosition(final Ver3DictDecoder dictDecoder,
|
/* package */ static int getTerminalPosition(final Ver3DictDecoder dictDecoder,
|
||||||
final String word) throws IOException, UnsupportedFormatException {
|
final String word) throws IOException, UnsupportedFormatException {
|
||||||
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
||||||
if (word == null) return FormatSpec.NOT_VALID_WORD;
|
if (word == null) return FormatSpec.NOT_VALID_WORD;
|
||||||
|
|
|
@ -58,6 +58,19 @@ public interface DictDecoder {
|
||||||
public FusionDictionary readDictionaryBinary(final FusionDictionary dict)
|
public FusionDictionary readDictionaryBinary(final FusionDictionary dict)
|
||||||
throws FileNotFoundException, IOException, UnsupportedFormatException;
|
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.
|
// Flags for DictionaryBufferFactory.
|
||||||
public static final int USE_READONLY_BYTEBUFFER = 0x01000000;
|
public static final int USE_READONLY_BYTEBUFFER = 0x01000000;
|
||||||
public static final int USE_BYTEARRAY = 0x02000000;
|
public static final int USE_BYTEARRAY = 0x02000000;
|
||||||
|
|
|
@ -60,7 +60,7 @@ public final class DynamicBinaryDictIOUtils {
|
||||||
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
||||||
dictBuffer.position(0);
|
dictBuffer.position(0);
|
||||||
final FileHeader header = dictDecoder.readHeader();
|
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;
|
if (wordPosition == FormatSpec.NOT_VALID_WORD) return;
|
||||||
|
|
||||||
dictBuffer.position(wordPosition);
|
dictBuffer.position(wordPosition);
|
||||||
|
@ -263,7 +263,7 @@ public final class DynamicBinaryDictIOUtils {
|
||||||
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
||||||
if (bigramStrings != null) {
|
if (bigramStrings != null) {
|
||||||
for (final WeightedString bigram : bigramStrings) {
|
for (final WeightedString bigram : bigramStrings) {
|
||||||
int position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, bigram.mWord);
|
int position = dictDecoder.getTerminalPosition(bigram.mWord);
|
||||||
if (position == FormatSpec.NOT_VALID_WORD) {
|
if (position == FormatSpec.NOT_VALID_WORD) {
|
||||||
// TODO: figure out what is the correct thing to do here.
|
// TODO: figure out what is the correct thing to do here.
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -309,4 +309,12 @@ public class Ver3DictDecoder implements DictDecoder {
|
||||||
}
|
}
|
||||||
return BinaryDictDecoderUtils.readDictionaryBinary(this, dict);
|
return BinaryDictDecoderUtils.readDictionaryBinary(this, dict);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTerminalPosition(String word) throws IOException, UnsupportedFormatException {
|
||||||
|
if (mDictBuffer == null) {
|
||||||
|
openDictBuffer();
|
||||||
|
}
|
||||||
|
return BinaryDictIOUtils.getTerminalPosition(this, word);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -555,7 +555,7 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
int position = -1;
|
int position = -1;
|
||||||
try {
|
try {
|
||||||
final long now = System.nanoTime();
|
final long now = System.nanoTime();
|
||||||
position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, word);
|
position = dictDecoder.getTerminalPosition(word);
|
||||||
diff = System.nanoTime() - now;
|
diff = System.nanoTime() - now;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "IOException while getTerminalPosition", e);
|
Log.e(TAG, "IOException while getTerminalPosition", e);
|
||||||
|
@ -596,16 +596,13 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
try {
|
try {
|
||||||
// too long word
|
// too long word
|
||||||
final String longWord = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
|
final String longWord = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
|
||||||
assertEquals(FormatSpec.NOT_VALID_WORD,
|
assertEquals(FormatSpec.NOT_VALID_WORD, dictDecoder.getTerminalPosition(longWord));
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, longWord));
|
|
||||||
|
|
||||||
// null
|
// null
|
||||||
assertEquals(FormatSpec.NOT_VALID_WORD,
|
assertEquals(FormatSpec.NOT_VALID_WORD, dictDecoder.getTerminalPosition(null));
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, null));
|
|
||||||
|
|
||||||
// empty string
|
// empty string
|
||||||
assertEquals(FormatSpec.NOT_VALID_WORD,
|
assertEquals(FormatSpec.NOT_VALID_WORD, dictDecoder.getTerminalPosition(""));
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, ""));
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
} catch (UnsupportedFormatException e) {
|
} catch (UnsupportedFormatException e) {
|
||||||
}
|
}
|
||||||
|
@ -655,16 +652,16 @@ public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
MoreAsserts.assertNotEqual(FormatSpec.NOT_VALID_WORD,
|
MoreAsserts.assertNotEqual(FormatSpec.NOT_VALID_WORD,
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, sWords.get(0)));
|
dictDecoder.getTerminalPosition(sWords.get(0)));
|
||||||
DynamicBinaryDictIOUtils.deleteWord(dictDecoder, sWords.get(0));
|
DynamicBinaryDictIOUtils.deleteWord(dictDecoder, sWords.get(0));
|
||||||
assertEquals(FormatSpec.NOT_VALID_WORD,
|
assertEquals(FormatSpec.NOT_VALID_WORD,
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, sWords.get(0)));
|
dictDecoder.getTerminalPosition(sWords.get(0)));
|
||||||
|
|
||||||
MoreAsserts.assertNotEqual(FormatSpec.NOT_VALID_WORD,
|
MoreAsserts.assertNotEqual(FormatSpec.NOT_VALID_WORD,
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, sWords.get(5)));
|
dictDecoder.getTerminalPosition(sWords.get(5)));
|
||||||
DynamicBinaryDictIOUtils.deleteWord(dictDecoder, sWords.get(5));
|
DynamicBinaryDictIOUtils.deleteWord(dictDecoder, sWords.get(5));
|
||||||
assertEquals(FormatSpec.NOT_VALID_WORD,
|
assertEquals(FormatSpec.NOT_VALID_WORD,
|
||||||
BinaryDictIOUtils.getTerminalPosition(dictDecoder, sWords.get(5)));
|
dictDecoder.getTerminalPosition(sWords.get(5)));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
} catch (UnsupportedFormatException e) {
|
} catch (UnsupportedFormatException e) {
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,8 +142,7 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
final Ver3DictDecoder dictDecoder = new Ver3DictDecoder(file);
|
||||||
dictDecoder.openDictBuffer();
|
position = dictDecoder.getTerminalPosition(word);
|
||||||
position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, word);
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
} catch (UnsupportedFormatException e) {
|
} catch (UnsupportedFormatException e) {
|
||||||
}
|
}
|
||||||
|
@ -161,7 +160,7 @@ public class BinaryDictIOUtilsTests extends AndroidTestCase {
|
||||||
*/
|
*/
|
||||||
private static PtNodeInfo findWordByBinaryDictReader(final Ver3DictDecoder dictDecoder,
|
private static PtNodeInfo findWordByBinaryDictReader(final Ver3DictDecoder dictDecoder,
|
||||||
final String word) throws IOException, UnsupportedFormatException {
|
final String word) throws IOException, UnsupportedFormatException {
|
||||||
int position = BinaryDictIOUtils.getTerminalPosition(dictDecoder, word);
|
int position = dictDecoder.getTerminalPosition(word);
|
||||||
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
final DictBuffer dictBuffer = dictDecoder.getDictBuffer();
|
||||||
if (position != FormatSpec.NOT_VALID_WORD) {
|
if (position != FormatSpec.NOT_VALID_WORD) {
|
||||||
dictBuffer.position(0);
|
dictBuffer.position(0);
|
||||||
|
|
Loading…
Reference in New Issue