Merge "Fix: PtNode array size writirng when array size > 127."

main
Keisuke Kuroyanagi 2013-11-20 10:07:19 +00:00 committed by Android (Google) Code Review
commit d39371e231
4 changed files with 11 additions and 3 deletions

View File

@ -429,7 +429,9 @@ public final class BinaryDictIOUtils {
if (countSize != 1 && countSize != 2) { if (countSize != 1 && countSize != 2) {
throw new RuntimeException("Strange size from getPtNodeCountSize : " + countSize); throw new RuntimeException("Strange size from getPtNodeCountSize : " + countSize);
} }
BinaryDictEncoderUtils.writeUIntToStream(destination, ptNodeCount, countSize); final int encodedPtNodeCount = (countSize == 2) ?
(ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
BinaryDictEncoderUtils.writeUIntToStream(destination, encodedPtNodeCount, countSize);
return countSize; return countSize;
} }

View File

@ -304,6 +304,8 @@ public final class FormatSpec {
static final int INVALID_CHARACTER = -1; static final int INVALID_CHARACTER = -1;
static final int MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT = 0x7F; // 127 static final int MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT = 0x7F; // 127
// Large PtNode array size field size is 2 bytes.
static final int LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG = 0x8000;
static final int MAX_PTNODES_IN_A_PT_NODE_ARRAY = 0x7FFF; // 32767 static final int MAX_PTNODES_IN_A_PT_NODE_ARRAY = 0x7FFF; // 32767
static final int MAX_BIGRAMS_IN_A_PTNODE = 10000; static final int MAX_BIGRAMS_IN_A_PTNODE = 10000;
static final int MAX_SHORTCUT_LIST_SIZE_IN_A_PTNODE = 0xFFFF; static final int MAX_SHORTCUT_LIST_SIZE_IN_A_PTNODE = 0xFFFF;

View File

@ -129,7 +129,9 @@ public class Ver3DictEncoder implements DictEncoder {
if (countSize != 1 && countSize != 2) { if (countSize != 1 && countSize != 2) {
throw new RuntimeException("Strange size from getGroupCountSize : " + countSize); throw new RuntimeException("Strange size from getGroupCountSize : " + countSize);
} }
mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, ptNodeCount, final int encodedPtNodeCount = (countSize == 2) ?
(ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, encodedPtNodeCount,
countSize); countSize);
} }

View File

@ -320,7 +320,9 @@ public class Ver4DictEncoder implements DictEncoder {
if (countSize != 1 && countSize != 2) { if (countSize != 1 && countSize != 2) {
throw new RuntimeException("Strange size from getPtNodeCountSize : " + countSize); throw new RuntimeException("Strange size from getPtNodeCountSize : " + countSize);
} }
mTriePos = BinaryDictEncoderUtils.writeUIntToBuffer(mTrieBuf, mTriePos, ptNodeCount, final int encodedPtNodeCount = (countSize == 2) ?
(ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
mTriePos = BinaryDictEncoderUtils.writeUIntToBuffer(mTrieBuf, mTriePos, encodedPtNodeCount,
countSize); countSize);
} }