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#ifndef LATINIME_VER4_PATRICIA_TRIE_NODE_WRITER_H 18#define LATINIME_VER4_PATRICIA_TRIE_NODE_WRITER_H 19 20#include "defines.h" 21#include "suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_reading_helper.h" 22#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h" 23#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_writer.h" 24#include "suggest/policyimpl/dictionary/structure/v4/content/probability_entry.h" 25 26namespace latinime { 27 28class BufferWithExtendableBuffer; 29class HeaderPolicy; 30class Ver4BigramListPolicy; 31class Ver4DictBuffers; 32class Ver4PatriciaTrieNodeReader; 33class Ver4PtNodeArrayReader; 34class Ver4ShortcutListPolicy; 35 36/* 37 * This class is used for helping to writes nodes of ver4 patricia trie. 38 */ 39class Ver4PatriciaTrieNodeWriter : public PtNodeWriter { 40 public: 41 Ver4PatriciaTrieNodeWriter(BufferWithExtendableBuffer *const trieBuffer, 42 Ver4DictBuffers *const buffers, const HeaderPolicy *const headerPolicy, 43 const PtNodeReader *const ptNodeReader, 44 const PtNodeArrayReader *const ptNodeArrayReader, 45 Ver4BigramListPolicy *const bigramPolicy, Ver4ShortcutListPolicy *const shortcutPolicy) 46 : mTrieBuffer(trieBuffer), mBuffers(buffers), mHeaderPolicy(headerPolicy), 47 mReadingHelper(ptNodeReader, ptNodeArrayReader), mBigramPolicy(bigramPolicy), 48 mShortcutPolicy(shortcutPolicy) {} 49 50 virtual ~Ver4PatriciaTrieNodeWriter() {} 51 52 virtual bool markPtNodeAsDeleted(const PtNodeParams *const toBeUpdatedPtNodeParams); 53 54 virtual bool markPtNodeAsMoved(const PtNodeParams *const toBeUpdatedPtNodeParams, 55 const int movedPos, const int bigramLinkedNodePos); 56 57 virtual bool markPtNodeAsWillBecomeNonTerminal( 58 const PtNodeParams *const toBeUpdatedPtNodeParams); 59 60 virtual bool updatePtNodeUnigramProperty(const PtNodeParams *const toBeUpdatedPtNodeParams, 61 const UnigramProperty *const unigramProperty); 62 63 virtual bool updatePtNodeProbabilityAndGetNeedsToKeepPtNodeAfterGC( 64 const PtNodeParams *const toBeUpdatedPtNodeParams, bool *const outNeedsToKeepPtNode); 65 66 virtual bool updateChildrenPosition(const PtNodeParams *const toBeUpdatedPtNodeParams, 67 const int newChildrenPosition); 68 69 bool updateTerminalId(const PtNodeParams *const toBeUpdatedPtNodeParams, 70 const int newTerminalId); 71 72 virtual bool writePtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 73 int *const ptNodeWritingPos); 74 75 virtual bool writeNewTerminalPtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 76 const UnigramProperty *const unigramProperty, int *const ptNodeWritingPos); 77 78 virtual bool addNgramEntry(const WordIdArrayView prevWordIds, const int wordId, 79 const BigramProperty *const bigramProperty, bool *const outAddedNewEntry); 80 81 virtual bool removeNgramEntry(const WordIdArrayView prevWordIds, const int wordId); 82 83 virtual bool updateAllBigramEntriesAndDeleteUselessEntries( 84 const PtNodeParams *const sourcePtNodeParams, int *const outBigramEntryCount); 85 86 virtual bool updateAllPositionFields(const PtNodeParams *const toBeUpdatedPtNodeParams, 87 const DictPositionRelocationMap *const dictPositionRelocationMap, 88 int *const outBigramEntryCount); 89 90 virtual bool addShortcutTarget(const PtNodeParams *const ptNodeParams, 91 const int *const targetCodePoints, const int targetCodePointCount, 92 const int shortcutProbability); 93 94 private: 95 DISALLOW_COPY_AND_ASSIGN(Ver4PatriciaTrieNodeWriter); 96 97 bool writePtNodeAndGetTerminalIdAndAdvancePosition( 98 const PtNodeParams *const ptNodeParams, int *const outTerminalId, 99 int *const ptNodeWritingPos); 100 101 // Create updated probability entry using given unigram property. In addition to the 102 // probability, this method updates historical information if needed. 103 // TODO: Update flags belonging to the unigram property. 104 const ProbabilityEntry createUpdatedEntryFrom( 105 const ProbabilityEntry *const originalProbabilityEntry, 106 const UnigramProperty *const unigramProperty) const; 107 108 bool updatePtNodeFlags(const int ptNodePos, const bool isBlacklisted, const bool isNotAWord, 109 const bool isTerminal, const bool hasMultipleChars); 110 111 static const int CHILDREN_POSITION_FIELD_SIZE; 112 113 BufferWithExtendableBuffer *const mTrieBuffer; 114 Ver4DictBuffers *const mBuffers; 115 const HeaderPolicy *const mHeaderPolicy; 116 DynamicPtReadingHelper mReadingHelper; 117 Ver4BigramListPolicy *const mBigramPolicy; 118 Ver4ShortcutListPolicy *const mShortcutPolicy; 119}; 120} // namespace latinime 121#endif /* LATINIME_VER4_PATRICIA_TRIE_NODE_WRITER_H */ 122