16bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi/*
26bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * Copyright (C) 2013, The Android Open Source Project
36bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *
46bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
56bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
66bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * You may obtain a copy of the License at
76bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *
86bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *     http://www.apache.org/licenses/LICENSE-2.0
96bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *
106bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
116bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
126bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * See the License for the specific language governing permissions and
146bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * limitations under the License.
156bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi */
166bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
176bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi/*
186bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * !!!!! DO NOT EDIT THIS FILE !!!!!
196bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *
206bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * This file was generated from
2188bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi *   dictionary/structure/v4/content/shortcut_dict_content.h
226bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi */
236bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
2407e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#ifndef LATINIME_BACKWARD_V402_SHORTCUT_DICT_CONTENT_H
2507e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#define LATINIME_BACKWARD_V402_SHORTCUT_DICT_CONTENT_H
266bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
276bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "defines.h"
2888bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/backward/v402/content/sparse_table_dict_content.h"
2988bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/backward/v402/content/terminal_position_lookup_table.h"
3088bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/backward/v402/ver4_dict_constants.h"
316bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
326bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace latinime {
336bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward {
3407e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 {
356bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
366bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass ShortcutDictContent : public SparseTableDictContent {
376bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi public:
386bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    ShortcutDictContent(const char *const dictPath, const bool isUpdatable)
396bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            : SparseTableDictContent(dictPath,
406bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                      Ver4DictConstants::SHORTCUT_LOOKUP_TABLE_FILE_EXTENSION,
416bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                      Ver4DictConstants::SHORTCUT_CONTENT_TABLE_FILE_EXTENSION,
426bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                      Ver4DictConstants::SHORTCUT_FILE_EXTENSION, isUpdatable,
436bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                      Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_BLOCK_SIZE,
446bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                      Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_DATA_SIZE) {}
456bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
466bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    ShortcutDictContent()
476bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            : SparseTableDictContent(Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_BLOCK_SIZE,
486bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                      Ver4DictConstants::SHORTCUT_ADDRESS_TABLE_DATA_SIZE) {}
496bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
506bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    void getShortcutEntry(const int maxCodePointCount, int *const outCodePoint,
516bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            int *const outCodePointCount, int *const outProbability, bool *const outhasNext,
526bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            const int shortcutEntryPos) {
536bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi        int readingPos = shortcutEntryPos;
546bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi        return getShortcutEntryAndAdvancePosition(maxCodePointCount, outCodePoint,
556bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi                outCodePointCount, outProbability, outhasNext, &readingPos);
566bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    }
576bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
586bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    void getShortcutEntryAndAdvancePosition(const int maxCodePointCount,
596bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            int *const outCodePoint, int *const outCodePointCount, int *const outProbability,
606bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            bool *const outhasNext, int *const shortcutEntryPos) const;
616bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
626bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   // Returns head position of shortcut list for a PtNode specified by terminalId.
636bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   int getShortcutListHeadPos(const int terminalId) const;
646bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
656bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool flushToFile(const char *const dictPath) const;
666bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
676bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool runGC(const TerminalPositionLookupTable::TerminalIdMap *const terminalIdMap,
686bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi           const ShortcutDictContent *const originalShortcutDictContent);
696bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
706bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool createNewShortcutList(const int terminalId);
716bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
726bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool copyShortcutList(const int shortcutListPos, const int toPos);
736bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
746bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool setProbability(const int probability, const int shortcutEntryPos);
756bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
766bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool writeShortcutEntry(const int *const codePoint, const int codePointCount,
776bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi           const int probability, const bool hasNext, const int shortcutEntryPos) {
786bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi       int writingPos = shortcutEntryPos;
796bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi       return writeShortcutEntryAndAdvancePosition(codePoint, codePointCount, probability,
806bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi               hasNext, &writingPos);
816bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   }
826bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
836bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   bool writeShortcutEntryAndAdvancePosition(const int *const codePoint,
846bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi           const int codePointCount, const int probability, const bool hasNext,
856bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi           int *const shortcutEntryPos);
866bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
876bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi   int findShortcutEntryAndGetPos(const int shortcutListPos,
886bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi           const int *const targetCodePointsToFind, const int codePointCount) const;
896bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
906bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi private:
916bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    DISALLOW_COPY_AND_ASSIGN(ShortcutDictContent);
926bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
936bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    bool copyShortcutListFromDictContent(const int shortcutListPos,
946bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            const ShortcutDictContent *const sourceShortcutDictContent, const int toPos);
956bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
966bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    int createAndGetShortcutFlags(const int probability, const bool hasNext) const;
976bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi};
9807e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402
996bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward
1006bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace latinime
10107e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#endif /* LATINIME_BACKWARD_V402_SHORTCUT_DICT_CONTENT_H */
102