/* * Copyright (C) 2013, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef LATINIME_SHORTCUT_DICT_CONTENT_H #define LATINIME_SHORTCUT_DICT_CONTENT_H #include #include "defines.h" #include "dictionary/structure/v4/content/sparse_table_dict_content.h" #include "dictionary/structure/v4/content/terminal_position_lookup_table.h" #include "dictionary/structure/v4/ver4_dict_constants.h" namespace latinime { class ReadWriteByteArrayView; class ShortcutDictContent : public SparseTableDictContent { public: ShortcutDictContent(const ReadWriteByteArrayView *const buffers) : SparseTableDictContent(buffers, Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_BLOCK_SIZE, Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_DATA_SIZE) {} ShortcutDictContent() : SparseTableDictContent(Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_BLOCK_SIZE, Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_DATA_SIZE) {} void getShortcutEntry(const int maxCodePointCount, int *const outCodePoint, int *const outCodePointCount, int *const outProbability, bool *const outhasNext, const int shortcutEntryPos) { int readingPos = shortcutEntryPos; return getShortcutEntryAndAdvancePosition(maxCodePointCount, outCodePoint, outCodePointCount, outProbability, outhasNext, &readingPos); } void getShortcutEntryAndAdvancePosition(const int maxCodePointCount, int *const outCodePoint, int *const outCodePointCount, int *const outProbability, bool *const outhasNext, int *const shortcutEntryPos) const; // Returns head position of shortcut list for a PtNode specified by terminalId. int getShortcutListHeadPos(const int terminalId) const; bool flushToFile(FILE *const file) const { return flush(file); } bool runGC(const TerminalPositionLookupTable::TerminalIdMap *const terminalIdMap, const ShortcutDictContent *const originalShortcutDictContent); bool createNewShortcutList(const int terminalId); bool copyShortcutList(const int shortcutListPos, const int toPos); bool setProbability(const int probability, const int shortcutEntryPos); bool writeShortcutEntry(const int *const codePoint, const int codePointCount, const int probability, const bool hasNext, const int shortcutEntryPos) { int writingPos = shortcutEntryPos; return writeShortcutEntryAndAdvancePosition(codePoint, codePointCount, probability, hasNext, &writingPos); } bool writeShortcutEntryAndAdvancePosition(const int *const codePoint, const int codePointCount, const int probability, const bool hasNext, int *const shortcutEntryPos); int findShortcutEntryAndGetPos(const int shortcutListPos, const int *const targetCodePointsToFind, const int codePointCount) const; private: DISALLOW_COPY_AND_ASSIGN(ShortcutDictContent); bool copyShortcutListFromDictContent(const int shortcutListPos, const ShortcutDictContent *const sourceShortcutDictContent, const int toPos); int createAndGetShortcutFlags(const int probability, const bool hasNext) const; }; } // namespace latinime #endif /* LATINIME_SHORTCUT_DICT_CONTENT_H */