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 216bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_node_writer.h 226bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi */ 236bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 2407e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#ifndef LATINIME_BACKWARD_V402_VER4_PATRICIA_TRIE_NODE_WRITER_H 2507e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#define LATINIME_BACKWARD_V402_VER4_PATRICIA_TRIE_NODE_WRITER_H 266bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 276bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "defines.h" 286bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_reading_helper.h" 296bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h" 306bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_writer.h" 3107e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#include "suggest/policyimpl/dictionary/structure/backward/v402/content/probability_entry.h" 329069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi#include "utils/int_array_view.h" 336bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 346bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace latinime { 356bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward { 3607e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 { 376bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 3807e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402 396bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward 406bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass BufferWithExtendableBuffer; 416bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward { 4207e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 { 4307e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402 446bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward 456bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass HeaderPolicy; 466bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward { 4707e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 { 486bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4BigramListPolicy; 496bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4DictBuffers; 506bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4PatriciaTrieNodeReader; 516bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4PtNodeArrayReader; 526bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4ShortcutListPolicy; 536bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 546bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi/* 556bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * This class is used for helping to writes nodes of ver4 patricia trie. 566bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi */ 576bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4PatriciaTrieNodeWriter : public PtNodeWriter { 586bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi public: 596bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4PatriciaTrieNodeWriter(BufferWithExtendableBuffer *const trieBuffer, 606bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4DictBuffers *const buffers, const HeaderPolicy *const headerPolicy, 616bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeReader *const ptNodeReader, 626bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeArrayReader *const ptNodeArrayReader, 636bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4BigramListPolicy *const bigramPolicy, Ver4ShortcutListPolicy *const shortcutPolicy) 646bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi : mTrieBuffer(trieBuffer), mBuffers(buffers), mHeaderPolicy(headerPolicy), 659069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi mPtNodeReader(ptNodeReader), mReadingHelper(ptNodeReader, ptNodeArrayReader), 669069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi mBigramPolicy(bigramPolicy), mShortcutPolicy(shortcutPolicy) {} 676bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 686bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual ~Ver4PatriciaTrieNodeWriter() {} 696bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 706bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool markPtNodeAsDeleted(const PtNodeParams *const toBeUpdatedPtNodeParams); 716bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 726bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool markPtNodeAsMoved(const PtNodeParams *const toBeUpdatedPtNodeParams, 736bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int movedPos, const int bigramLinkedNodePos); 746bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 756bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool markPtNodeAsWillBecomeNonTerminal( 766bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const toBeUpdatedPtNodeParams); 776bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 786bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updatePtNodeUnigramProperty(const PtNodeParams *const toBeUpdatedPtNodeParams, 796bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const UnigramProperty *const unigramProperty); 806bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 816bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updatePtNodeProbabilityAndGetNeedsToKeepPtNodeAfterGC( 826bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const toBeUpdatedPtNodeParams, bool *const outNeedsToKeepPtNode); 836bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 846bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updateChildrenPosition(const PtNodeParams *const toBeUpdatedPtNodeParams, 856bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int newChildrenPosition); 866bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 876bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool updateTerminalId(const PtNodeParams *const toBeUpdatedPtNodeParams, 886bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int newTerminalId); 896bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 906bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool writePtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 916bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi int *const ptNodeWritingPos); 926bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 936bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool writeNewTerminalPtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 946bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const UnigramProperty *const unigramProperty, int *const ptNodeWritingPos); 956bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 969069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi virtual bool addNgramEntry(const WordIdArrayView prevWordIds, const int wordId, 979069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi const BigramProperty *const bigramProperty, bool *const outAddedNewEntry); 986bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 999069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi virtual bool removeNgramEntry(const WordIdArrayView prevWordIds, const int wordId); 1006bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1016bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updateAllBigramEntriesAndDeleteUselessEntries( 1026bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const sourcePtNodeParams, int *const outBigramEntryCount); 1036bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1046bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updateAllPositionFields(const PtNodeParams *const toBeUpdatedPtNodeParams, 1056bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const DictPositionRelocationMap *const dictPositionRelocationMap, 1066bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi int *const outBigramEntryCount); 1076bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1086bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool addShortcutTarget(const PtNodeParams *const ptNodeParams, 1096bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int *const targetCodePoints, const int targetCodePointCount, 1106bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int shortcutProbability); 1116bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1126bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool updatePtNodeHasBigramsAndShortcutTargetsFlags(const PtNodeParams *const ptNodeParams); 1136bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1146bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi private: 1156bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi DISALLOW_COPY_AND_ASSIGN(Ver4PatriciaTrieNodeWriter); 1166bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1176bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool writePtNodeAndGetTerminalIdAndAdvancePosition( 1186bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const ptNodeParams, int *const outTerminalId, 1196bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi int *const ptNodeWritingPos); 1206bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1216bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi // Create updated probability entry using given unigram property. In addition to the 1226bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi // probability, this method updates historical information if needed. 1236bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi // TODO: Update flags belonging to the unigram property. 1246bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const ProbabilityEntry createUpdatedEntryFrom( 1256bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const ProbabilityEntry *const originalProbabilityEntry, 1266bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const UnigramProperty *const unigramProperty) const; 1276bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1286bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool updatePtNodeFlags(const int ptNodePos, const bool isBlacklisted, const bool isNotAWord, 1296bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const bool isTerminal, const bool hasShortcutTargets, const bool hasBigrams, 1306bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const bool hasMultipleChars); 1316bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1326bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi static const int CHILDREN_POSITION_FIELD_SIZE; 1336bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1346bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi BufferWithExtendableBuffer *const mTrieBuffer; 1356bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4DictBuffers *const mBuffers; 1366bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const HeaderPolicy *const mHeaderPolicy; 1379069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi const PtNodeReader *const mPtNodeReader; 1386bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi DynamicPtReadingHelper mReadingHelper; 1396bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4BigramListPolicy *const mBigramPolicy; 1406bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4ShortcutListPolicy *const mShortcutPolicy; 1416bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi}; 14207e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402 1436bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward 1446bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace latinime 14507e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#endif /* LATINIME_BACKWARD_V402_VER4_PATRICIA_TRIE_NODE_WRITER_H */ 146