12fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa/* 22fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Copyright (C) 2013, The Android Open Source Project 32fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * 42fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Licensed under the Apache License, Version 2.0 (the "License"); 52fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * you may not use this file except in compliance with the License. 62fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * You may obtain a copy of the License at 72fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * 82fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * http://www.apache.org/licenses/LICENSE-2.0 92fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * 102fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * Unless required by applicable law or agreed to in writing, software 112fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * distributed under the License is distributed on an "AS IS" BASIS, 122fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * See the License for the specific language governing permissions and 142fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa * limitations under the License. 152fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa */ 162fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 172fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#ifndef LATINIME_PT_NODE_WRITER_H 182fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#define LATINIME_PT_NODE_WRITER_H 192fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 208ca9be17db2f1845c7c7a3b584507cf60c9ca53dKen Wakasa#include <unordered_map> 212fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 228ca9be17db2f1845c7c7a3b584507cf60c9ca53dKen Wakasa#include "defines.h" 232fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#include "suggest/policyimpl/dictionary/structure/pt_common/pt_node_params.h" 249069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi#include "utils/int_array_view.h" 252fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 262fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasanamespace latinime { 272fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 28620a05ae59ec9f7be39557094fc306c51c712ca1Keisuke Kuroyanagiclass BigramProperty; 29b636e25e951e48e071d5348756413d6fc065632dKeisuke Kuroyanagiclass UnigramProperty; 30b636e25e951e48e071d5348756413d6fc065632dKeisuke Kuroyanagi 312fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa// Interface class used to write PtNode information. 322fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaclass PtNodeWriter { 332fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public: 348ca9be17db2f1845c7c7a3b584507cf60c9ca53dKen Wakasa typedef std::unordered_map<int, int> PtNodeArrayPositionRelocationMap; 358ca9be17db2f1845c7c7a3b584507cf60c9ca53dKen Wakasa typedef std::unordered_map<int, int> PtNodePositionRelocationMap; 362fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa struct DictPositionRelocationMap { 372fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public: 382fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa DictPositionRelocationMap() 392fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa : mPtNodeArrayPositionRelocationMap(), mPtNodePositionRelocationMap() {} 402fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 412fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa PtNodeArrayPositionRelocationMap mPtNodeArrayPositionRelocationMap; 422fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa PtNodePositionRelocationMap mPtNodePositionRelocationMap; 432fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 442fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private: 452fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa DISALLOW_COPY_AND_ASSIGN(DictPositionRelocationMap); 462fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa }; 472fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 482fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual ~PtNodeWriter() {} 492fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 502fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool markPtNodeAsDeleted(const PtNodeParams *const toBeUpdatedPtNodeParams) = 0; 512fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 522fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool markPtNodeAsMoved(const PtNodeParams *const toBeUpdatedPtNodeParams, 532fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const int movedPos, const int bigramLinkedNodePos) = 0; 542fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 552fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool markPtNodeAsWillBecomeNonTerminal( 562fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const PtNodeParams *const toBeUpdatedPtNodeParams) = 0; 572fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 58b636e25e951e48e071d5348756413d6fc065632dKeisuke Kuroyanagi virtual bool updatePtNodeUnigramProperty(const PtNodeParams *const toBeUpdatedPtNodeParams, 59b636e25e951e48e071d5348756413d6fc065632dKeisuke Kuroyanagi const UnigramProperty *const unigramProperty) = 0; 602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 612fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool updatePtNodeProbabilityAndGetNeedsToKeepPtNodeAfterGC( 622fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const PtNodeParams *const toBeUpdatedPtNodeParams, 632fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa bool *const outNeedsToKeepPtNode) = 0; 642fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 652fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool updateChildrenPosition(const PtNodeParams *const toBeUpdatedPtNodeParams, 662fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const int newChildrenPosition) = 0; 672fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 682fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool writePtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 692fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa int *const ptNodeWritingPos) = 0; 702fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 712fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool writeNewTerminalPtNodeAndAdvancePosition(const PtNodeParams *const ptNodeParams, 72b636e25e951e48e071d5348756413d6fc065632dKeisuke Kuroyanagi const UnigramProperty *const unigramProperty, int *const ptNodeWritingPos) = 0; 732fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 749069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi virtual bool addNgramEntry(const WordIdArrayView prevWordIds, const int wordId, 759069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi const BigramProperty *const bigramProperty, bool *const outAddedNewEntry) = 0; 762fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 779069d30043d5182dfd38465ad9bbc11ad73fab7cKeisuke Kuroyanagi virtual bool removeNgramEntry(const WordIdArrayView prevWordIds, const int wordId) = 0; 782fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 792fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool updateAllBigramEntriesAndDeleteUselessEntries( 802fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const PtNodeParams *const sourcePtNodeParams, int *const outBigramEntryCount) = 0; 812fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 822fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool updateAllPositionFields(const PtNodeParams *const toBeUpdatedPtNodeParams, 832fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const DictPositionRelocationMap *const dictPositionRelocationMap, 842fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa int *const outBigramEntryCount) = 0; 852fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 862fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa virtual bool addShortcutTarget(const PtNodeParams *const ptNodeParams, 872fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const int *const targetCodePoints, const int targetCodePointCount, 882fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa const int shortcutProbability) = 0; 892fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 902fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa protected: 912fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa PtNodeWriter() {}; 922fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa 932fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private: 942fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa DISALLOW_COPY_AND_ASSIGN(PtNodeWriter); 952fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa}; 962fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa} // namespace latinime 972fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa#endif /* LATINIME_PT_NODE_WRITER_H */ 98