ver4_patricia_trie_node_writer.h revision 6bf268132d60061fd26bd8cba63a12b56b22056e
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 246bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#ifndef LATINIME_BACKWARD_V401_VER4_PATRICIA_TRIE_NODE_WRITER_H 256bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#define LATINIME_BACKWARD_V401_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" 316bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "suggest/policyimpl/dictionary/structure/backward/v401/content/probability_entry.h" 326bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 336bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace latinime { 346bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward { 356bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace v401 { 366bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 376bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace v401 386bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward 396bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass BufferWithExtendableBuffer; 406bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward { 416bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace v401 { 426bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace v401 436bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward 446bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass HeaderPolicy; 456bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward { 466bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace v401 { 476bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4BigramListPolicy; 486bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4DictBuffers; 496bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4PatriciaTrieNodeReader; 506bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4PtNodeArrayReader; 516bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4ShortcutListPolicy; 526bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 536bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi/* 546bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * This class is used for helping to writes nodes of ver4 patricia trie. 556bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi */ 566bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4PatriciaTrieNodeWriter : public PtNodeWriter { 576bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi public: 586bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4PatriciaTrieNodeWriter(BufferWithExtendableBuffer *const trieBuffer, 596bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4DictBuffers *const buffers, const HeaderPolicy *const headerPolicy, 606bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeReader *const ptNodeReader, 616bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeArrayReader *const ptNodeArrayReader, 626bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4BigramListPolicy *const bigramPolicy, Ver4ShortcutListPolicy *const shortcutPolicy) 636bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi : mTrieBuffer(trieBuffer), mBuffers(buffers), mHeaderPolicy(headerPolicy), 646bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi mReadingHelper(ptNodeReader, ptNodeArrayReader), mBigramPolicy(bigramPolicy), 656bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi mShortcutPolicy(shortcutPolicy) {} 666bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 676bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual ~Ver4PatriciaTrieNodeWriter() {} 686bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 696bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool markPtNodeAsDeleted(const PtNodeParams *const toBeUpdatedPtNodeParams); 706bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 716bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool markPtNodeAsMoved(const PtNodeParams *const toBeUpdatedPtNodeParams, 726bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int movedPos, const int bigramLinkedNodePos); 736bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 746bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool markPtNodeAsWillBecomeNonTerminal( 756bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const toBeUpdatedPtNodeParams); 766bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 776bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updatePtNodeUnigramProperty(const PtNodeParams *const toBeUpdatedPtNodeParams, 786bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const UnigramProperty *const unigramProperty); 796bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 806bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updatePtNodeProbabilityAndGetNeedsToKeepPtNodeAfterGC( 816bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const toBeUpdatedPtNodeParams, bool *const outNeedsToKeepPtNode); 826bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 836bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updateChildrenPosition(const PtNodeParams *const toBeUpdatedPtNodeParams, 846bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int newChildrenPosition); 856bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 866bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool updateTerminalId(const PtNodeParams *const toBeUpdatedPtNodeParams, 876bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int newTerminalId); 886bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 896bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool writePtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 906bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi int *const ptNodeWritingPos); 916bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 926bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool writeNewTerminalPtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 936bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const UnigramProperty *const unigramProperty, int *const ptNodeWritingPos); 946bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 956bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool addNewBigramEntry(const PtNodeParams *const sourcePtNodeParams, 966bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const targetPtNodeParam, const BigramProperty *const bigramProperty, 976bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool *const outAddedNewBigram); 986bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 996bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool removeBigramEntry(const PtNodeParams *const sourcePtNodeParams, 1006bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const targetPtNodeParam); 1016bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1026bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updateAllBigramEntriesAndDeleteUselessEntries( 1036bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const sourcePtNodeParams, int *const outBigramEntryCount); 1046bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1056bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool updateAllPositionFields(const PtNodeParams *const toBeUpdatedPtNodeParams, 1066bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const DictPositionRelocationMap *const dictPositionRelocationMap, 1076bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi int *const outBigramEntryCount); 1086bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1096bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi virtual bool addShortcutTarget(const PtNodeParams *const ptNodeParams, 1106bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int *const targetCodePoints, const int targetCodePointCount, 1116bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const int shortcutProbability); 1126bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1136bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool updatePtNodeHasBigramsAndShortcutTargetsFlags(const PtNodeParams *const ptNodeParams); 1146bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1156bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi private: 1166bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi DISALLOW_COPY_AND_ASSIGN(Ver4PatriciaTrieNodeWriter); 1176bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1186bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool writePtNodeAndGetTerminalIdAndAdvancePosition( 1196bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const PtNodeParams *const ptNodeParams, int *const outTerminalId, 1206bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi int *const ptNodeWritingPos); 1216bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1226bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi // Create updated probability entry using given unigram property. In addition to the 1236bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi // probability, this method updates historical information if needed. 1246bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi // TODO: Update flags belonging to the unigram property. 1256bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const ProbabilityEntry createUpdatedEntryFrom( 1266bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const ProbabilityEntry *const originalProbabilityEntry, 1276bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const UnigramProperty *const unigramProperty) const; 1286bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1296bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi bool updatePtNodeFlags(const int ptNodePos, const bool isBlacklisted, const bool isNotAWord, 1306bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const bool isTerminal, const bool hasShortcutTargets, const bool hasBigrams, 1316bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const bool hasMultipleChars); 1326bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1336bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi static const int CHILDREN_POSITION_FIELD_SIZE; 1346bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi 1356bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi BufferWithExtendableBuffer *const mTrieBuffer; 1366bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4DictBuffers *const mBuffers; 1376bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi const HeaderPolicy *const mHeaderPolicy; 1386bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi DynamicPtReadingHelper mReadingHelper; 1396bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4BigramListPolicy *const mBigramPolicy; 1406bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi Ver4ShortcutListPolicy *const mShortcutPolicy; 1416bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi}; 1426bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace v401 1436bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward 1446bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace latinime 1456bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#endif /* LATINIME_BACKWARD_V401_VER4_PATRICIA_TRIE_NODE_WRITER_H */ 146