Fix parent position reading for ver3 dict.

Bug: 6669677
Change-Id: Ia55d4ecb43c7d37b9bc466b848d5142bc13cd823
This commit is contained in:
Keisuke Kuroyanagi 2013-08-08 16:31:17 +09:00
parent 60eb250194
commit b2408c7f71
3 changed files with 5 additions and 4 deletions

View file

@ -27,7 +27,9 @@ void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(c
const uint8_t *const dictRoot = mBinaryDictionaryInfo->getDictRoot();
int pos = nodePos;
mFlags = PatriciaTrieReadingUtils::getFlagsAndAdvancePosition(dictRoot, &pos);
mParentPos = DynamicPatriciaTrieReadingUtils::getParentPosAndAdvancePosition(dictRoot, &pos);
const int parentPos =
DynamicPatriciaTrieReadingUtils::getParentPosAndAdvancePosition(dictRoot, &pos);
mParentPos = (parentPos != 0) ? mNodePos + parentPos : NOT_A_DICT_POS;
if (outCodePoints != 0) {
mCodePointCount = PatriciaTrieReadingUtils::getCharsAndAdvancePosition(
dictRoot, mFlags, maxCodePointCount, outCodePoints, &pos);

View file

@ -94,7 +94,7 @@ int DynamicPatriciaTriePolicy::getCodePointsAndProbabilityAndReturnCodePointCoun
reverseCodePoints[codePointCount++] = mergedNodeCodePoints[i];
}
// Then, follow parent pos toward the root node.
while (nodeReader.getParentPos() != getRootPosition()) {
while (nodeReader.getParentPos() != NOT_A_DICT_POS) {
// codePointCount must be incremented at least once in each iteration to ensure preventing
// infinite loop.
if (nodeReader.isDeleted() || codePointCount > maxCodePointCount

View file

@ -39,8 +39,7 @@ class DynamicPatriciaTrieReadingUtils {
static AK_FORCE_INLINE int getParentPosAndAdvancePosition(const uint8_t *const buffer,
int *const pos) {
const int base = *pos;
return base + ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
return ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
}
static int readChildrenPositionAndAdvancePosition(const uint8_t *const buffer,