Add DynamicShortcutListPolicy::copyAllShortcuts().

Bug: 6669677
Change-Id: I74959fe3ca59d77ba0279c75f4d72db13735322f
main
Keisuke Kuroyanagi 2013-09-03 18:36:53 +09:00
parent eaee156128
commit 9e3082e016
1 changed files with 25 additions and 2 deletions

View File

@ -31,7 +31,7 @@ namespace latinime {
*/ */
class DynamicShortcutListPolicy : public DictionaryShortcutsStructurePolicy { class DynamicShortcutListPolicy : public DictionaryShortcutsStructurePolicy {
public: public:
explicit DynamicShortcutListPolicy(const BufferWithExtendableBuffer *const buffer) explicit DynamicShortcutListPolicy(BufferWithExtendableBuffer *const buffer)
: mBuffer(buffer) {} : mBuffer(buffer) {}
~DynamicShortcutListPolicy() {} ~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: private:
DISALLOW_IMPLICIT_CONSTRUCTORS(DynamicShortcutListPolicy); DISALLOW_IMPLICIT_CONSTRUCTORS(DynamicShortcutListPolicy);
const BufferWithExtendableBuffer *const mBuffer; BufferWithExtendableBuffer *const mBuffer;
}; };
} // namespace latinime } // namespace latinime
#endif // LATINIME_DYNAMIC_SHORTCUT_LIST_POLICY_H #endif // LATINIME_DYNAMIC_SHORTCUT_LIST_POLICY_H