diff options
author | 2013-09-03 04:44:37 -0700 | |
---|---|---|
committer | 2013-09-03 04:44:37 -0700 | |
commit | 4f9e0972f2da1e780e0e42d64e13cf674f6262cc (patch) | |
tree | 76f001e0785415b80730ad9c47f84dceef37e1a7 | |
parent | c606e9d79459d3111817bf92aa9bd7ab24cb113d (diff) | |
parent | 64621cf49b609ec5c8081cce202ae2f016be20bd (diff) | |
download | latinime-4f9e0972f2da1e780e0e42d64e13cf674f6262cc.tar.gz latinime-4f9e0972f2da1e780e0e42d64e13cf674f6262cc.tar.xz latinime-4f9e0972f2da1e780e0e42d64e13cf674f6262cc.zip |
am 64621cf4: Merge "Add DynamicShortcutListPolicy::copyAllShortcuts()."
* commit '64621cf49b609ec5c8081cce202ae2f016be20bd':
Add DynamicShortcutListPolicy::copyAllShortcuts().
-rw-r--r-- | native/jni/src/suggest/policyimpl/dictionary/shortcut/dynamic_shortcut_list_policy.h | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/native/jni/src/suggest/policyimpl/dictionary/shortcut/dynamic_shortcut_list_policy.h b/native/jni/src/suggest/policyimpl/dictionary/shortcut/dynamic_shortcut_list_policy.h index 4bf745fa3..5e9c52950 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/shortcut/dynamic_shortcut_list_policy.h +++ b/native/jni/src/suggest/policyimpl/dictionary/shortcut/dynamic_shortcut_list_policy.h @@ -31,7 +31,7 @@ namespace latinime { */ class DynamicShortcutListPolicy : public DictionaryShortcutsStructurePolicy { public: - explicit DynamicShortcutListPolicy(const BufferWithExtendableBuffer *const buffer) + explicit DynamicShortcutListPolicy(BufferWithExtendableBuffer *const buffer) : mBuffer(buffer) {} ~DynamicShortcutListPolicy() {} @@ -82,10 +82,33 @@ class DynamicShortcutListPolicy : public DictionaryShortcutsStructurePolicy { } } + // Copy shortcuts from the shortcut list that starts at fromPos to toPos and advance these + // positions after the shortcut lists. + void copyAllShortcuts(int *const fromPos, int *const toPos) { + const bool usesAdditionalBuffer = mBuffer->isInAdditionalBuffer(*fromPos); + const uint8_t *const buffer = mBuffer->getBuffer(usesAdditionalBuffer); + if (usesAdditionalBuffer) { + *fromPos -= mBuffer->getOriginalBufferSize(); + } + const int shortcutListSize = ShortcutListReadingUtils + ::getShortcutListSizeAndForwardPointer(buffer, fromPos); + // Copy shortcut list size. + mBuffer->writeUintAndAdvancePosition( + shortcutListSize + ShortcutListReadingUtils::getShortcutListSizeFieldSize(), + ShortcutListReadingUtils::getShortcutListSizeFieldSize(), toPos); + for (int i = 0; i < shortcutListSize; ++i) { + const uint8_t data = ByteArrayUtils::readUint8AndAdvancePosition(buffer, fromPos); + mBuffer->writeUintAndAdvancePosition(data, 1 /* size */, toPos); + } + if (usesAdditionalBuffer) { + *fromPos += mBuffer->getOriginalBufferSize(); + } + } + private: DISALLOW_IMPLICIT_CONSTRUCTORS(DynamicShortcutListPolicy); - const BufferWithExtendableBuffer *const mBuffer; + BufferWithExtendableBuffer *const mBuffer; }; } // namespace latinime #endif // LATINIME_DYNAMIC_SHORTCUT_LIST_POLICY_H |