ver4_patricia_trie_node_writer.h revision 9069d30043d5182dfd38465ad9bbc11ad73fab7c
1/* 2 * Copyright (C) 2013, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17/* 18 * !!!!! DO NOT EDIT THIS FILE !!!!! 19 * 20 * This file was generated from 21 * suggest/policyimpl/dictionary/structure/v4/ver4_patricia_trie_node_writer.h 22 */ 23 24#ifndef LATINIME_BACKWARD_V402_VER4_PATRICIA_TRIE_NODE_WRITER_H 25#define LATINIME_BACKWARD_V402_VER4_PATRICIA_TRIE_NODE_WRITER_H 26 27#include "defines.h" 28#include "suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_reading_helper.h" 29#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h" 30#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_writer.h" 31#include "suggest/policyimpl/dictionary/structure/backward/v402/content/probability_entry.h" 32#include "utils/int_array_view.h" 33 34namespace latinime { 35namespace backward { 36namespace v402 { 37 38} // namespace v402 39} // namespace backward 40class BufferWithExtendableBuffer; 41namespace backward { 42namespace v402 { 43} // namespace v402 44} // namespace backward 45class HeaderPolicy; 46namespace backward { 47namespace v402 { 48class Ver4BigramListPolicy; 49class Ver4DictBuffers; 50class Ver4PatriciaTrieNodeReader; 51class Ver4PtNodeArrayReader; 52class Ver4ShortcutListPolicy; 53 54/* 55 * This class is used for helping to writes nodes of ver4 patricia trie. 56 */ 57class Ver4PatriciaTrieNodeWriter : public PtNodeWriter { 58 public: 59 Ver4PatriciaTrieNodeWriter(BufferWithExtendableBuffer *const trieBuffer, 60 Ver4DictBuffers *const buffers, const HeaderPolicy *const headerPolicy, 61 const PtNodeReader *const ptNodeReader, 62 const PtNodeArrayReader *const ptNodeArrayReader, 63 Ver4BigramListPolicy *const bigramPolicy, Ver4ShortcutListPolicy *const shortcutPolicy) 64 : mTrieBuffer(trieBuffer), mBuffers(buffers), mHeaderPolicy(headerPolicy), 65 mPtNodeReader(ptNodeReader), mReadingHelper(ptNodeReader, ptNodeArrayReader), 66 mBigramPolicy(bigramPolicy), mShortcutPolicy(shortcutPolicy) {} 67 68 virtual ~Ver4PatriciaTrieNodeWriter() {} 69 70 virtual bool markPtNodeAsDeleted(const PtNodeParams *const toBeUpdatedPtNodeParams); 71 72 virtual bool markPtNodeAsMoved(const PtNodeParams *const toBeUpdatedPtNodeParams, 73 const int movedPos, const int bigramLinkedNodePos); 74 75 virtual bool markPtNodeAsWillBecomeNonTerminal( 76 const PtNodeParams *const toBeUpdatedPtNodeParams); 77 78 virtual bool updatePtNodeUnigramProperty(const PtNodeParams *const toBeUpdatedPtNodeParams, 79 const UnigramProperty *const unigramProperty); 80 81 virtual bool updatePtNodeProbabilityAndGetNeedsToKeepPtNodeAfterGC( 82 const PtNodeParams *const toBeUpdatedPtNodeParams, bool *const outNeedsToKeepPtNode); 83 84 virtual bool updateChildrenPosition(const PtNodeParams *const toBeUpdatedPtNodeParams, 85 const int newChildrenPosition); 86 87 bool updateTerminalId(const PtNodeParams *const toBeUpdatedPtNodeParams, 88 const int newTerminalId); 89 90 virtual bool writePtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 91 int *const ptNodeWritingPos); 92 93 virtual bool writeNewTerminalPtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 94 const UnigramProperty *const unigramProperty, int *const ptNodeWritingPos); 95 96 virtual bool addNgramEntry(const WordIdArrayView prevWordIds, const int wordId, 97 const BigramProperty *const bigramProperty, bool *const outAddedNewEntry); 98 99 virtual bool removeNgramEntry(const WordIdArrayView prevWordIds, const int wordId); 100 101 virtual bool updateAllBigramEntriesAndDeleteUselessEntries( 102 const PtNodeParams *const sourcePtNodeParams, int *const outBigramEntryCount); 103 104 virtual bool updateAllPositionFields(const PtNodeParams *const toBeUpdatedPtNodeParams, 105 const DictPositionRelocationMap *const dictPositionRelocationMap, 106 int *const outBigramEntryCount); 107 108 virtual bool addShortcutTarget(const PtNodeParams *const ptNodeParams, 109 const int *const targetCodePoints, const int targetCodePointCount, 110 const int shortcutProbability); 111 112 bool updatePtNodeHasBigramsAndShortcutTargetsFlags(const PtNodeParams *const ptNodeParams); 113 114 private: 115 DISALLOW_COPY_AND_ASSIGN(Ver4PatriciaTrieNodeWriter); 116 117 bool writePtNodeAndGetTerminalIdAndAdvancePosition( 118 const PtNodeParams *const ptNodeParams, int *const outTerminalId, 119 int *const ptNodeWritingPos); 120 121 // Create updated probability entry using given unigram property. In addition to the 122 // probability, this method updates historical information if needed. 123 // TODO: Update flags belonging to the unigram property. 124 const ProbabilityEntry createUpdatedEntryFrom( 125 const ProbabilityEntry *const originalProbabilityEntry, 126 const UnigramProperty *const unigramProperty) const; 127 128 bool updatePtNodeFlags(const int ptNodePos, const bool isBlacklisted, const bool isNotAWord, 129 const bool isTerminal, const bool hasShortcutTargets, const bool hasBigrams, 130 const bool hasMultipleChars); 131 132 static const int CHILDREN_POSITION_FIELD_SIZE; 133 134 BufferWithExtendableBuffer *const mTrieBuffer; 135 Ver4DictBuffers *const mBuffers; 136 const HeaderPolicy *const mHeaderPolicy; 137 const PtNodeReader *const mPtNodeReader; 138 DynamicPtReadingHelper mReadingHelper; 139 Ver4BigramListPolicy *const mBigramPolicy; 140 Ver4ShortcutListPolicy *const mShortcutPolicy; 141}; 142} // namespace v402 143} // namespace backward 144} // namespace latinime 145#endif /* LATINIME_BACKWARD_V402_VER4_PATRICIA_TRIE_NODE_WRITER_H */ 146