Fix children position reading for dynamic patricia trie.
Bug: 6669677 Change-Id: I68ad68361676f952bd25903c253c22617d3ce361
This commit is contained in:
parent
fcc6ab08ae
commit
69ebca0643
3 changed files with 12 additions and 10 deletions
|
@ -45,15 +45,11 @@ void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(c
|
|||
} else {
|
||||
mProbability = NOT_A_PROBABILITY;
|
||||
}
|
||||
if (hasChildren()) {
|
||||
mChildrenPos = DynamicPatriciaTrieReadingUtils::readChildrenPositionAndAdvancePosition(
|
||||
dictBuf, mFlags, &pos);
|
||||
if (usesAdditionalBuffer && mChildrenPos != NOT_A_DICT_POS) {
|
||||
mChildrenPos += mOriginalDictSize;
|
||||
}
|
||||
} else {
|
||||
mChildrenPos = NOT_A_DICT_POS;
|
||||
}
|
||||
if (usesAdditionalBuffer) {
|
||||
pos += mOriginalDictSize;
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ class DynamicPatriciaTrieNodeReader {
|
|||
}
|
||||
|
||||
AK_FORCE_INLINE bool hasChildren() const {
|
||||
return PatriciaTrieReadingUtils::hasChildrenInFlags(mFlags);
|
||||
return mChildrenPos != NOT_A_DICT_POS;
|
||||
}
|
||||
|
||||
AK_FORCE_INLINE bool isTerminal() const {
|
||||
|
|
|
@ -32,7 +32,13 @@ const DptReadingUtils::NodeFlags DptReadingUtils::FLAG_IS_DELETED = 0x80;
|
|||
const uint8_t *const buffer, const NodeFlags flags, int *const pos) {
|
||||
if ((flags & MASK_MOVED) == FLAG_IS_NOT_MOVED) {
|
||||
const int base = *pos;
|
||||
return base + ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
|
||||
const int offset = ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
|
||||
if (offset == 0) {
|
||||
// 0 offset means that the node does not have children.
|
||||
return NOT_A_DICT_POS;
|
||||
} else {
|
||||
return base + offset;
|
||||
}
|
||||
} else {
|
||||
return NOT_A_DICT_POS;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue