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