diff options
author | 2013-08-29 02:47:30 -0700 | |
---|---|---|
committer | 2013-08-29 02:47:30 -0700 | |
commit | 7c1a6f9787b4615f70656ddd6604d720be5b9d3e (patch) | |
tree | 6b781fb2407664a3db560cfc736a660342a8edb8 | |
parent | 6b59bed09d8b5b95a2cb96ff22eedb88a6056341 (diff) | |
parent | b384cb28a14fe97533d5ac96b6fc319da50b1d10 (diff) | |
download | latinime-7c1a6f9787b4615f70656ddd6604d720be5b9d3e.tar.gz latinime-7c1a6f9787b4615f70656ddd6604d720be5b9d3e.tar.xz latinime-7c1a6f9787b4615f70656ddd6604d720be5b9d3e.zip |
am b384cb28: Merge "Fix children position reading for dynamic patricia trie."
* commit 'b384cb28a14fe97533d5ac96b6fc319da50b1d10':
Fix children position reading for dynamic patricia trie.
3 files changed, 12 insertions, 10 deletions
diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp index c427ebe2d..2b4490701 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp @@ -45,14 +45,10 @@ 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; + mChildrenPos = DynamicPatriciaTrieReadingUtils::readChildrenPositionAndAdvancePosition( + dictBuf, mFlags, &pos); + if (usesAdditionalBuffer && mChildrenPos != NOT_A_DICT_POS) { + mChildrenPos += mOriginalDictSize; } if (usesAdditionalBuffer) { pos += mOriginalDictSize; diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h index 2a636289e..8e7db3568 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h @@ -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 { diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp index 1ef3b65c3..5d979fa51 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp @@ -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; } |