Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e3082e0 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Add DynamicShortcutListPolicy::copyAllShortcuts().

Bug: 6669677
Change-Id: I74959fe3ca59d77ba0279c75f4d72db13735322f
parent eaee1561
Loading
Loading
Loading
Loading
+25 −2
Original line number Diff line number Diff line
@@ -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