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 CHANGE THE LOGIC IN THIS FILE !!!!!
196bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * Do not edit this file other than updating policy's interface.
206bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *
216bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi * This file was generated from
226bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi *   suggest/policyimpl/dictionary/structure/v4/bigram/ver4_bigram_list_policy.h
236bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi */
246bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
2507e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#ifndef LATINIME_BACKWARD_V402_VER4_BIGRAM_LIST_POLICY_H
2607e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#define LATINIME_BACKWARD_V402_VER4_BIGRAM_LIST_POLICY_H
276bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
286bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi#include "defines.h"
2988bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/interface/dictionary_bigrams_structure_policy.h"
3088bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/backward/v402/content/bigram_entry.h"
316bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
326bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace latinime {
336bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward {
3407e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 {
356bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
366bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass BigramDictContent;
3707e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402
386bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward
3979bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagiclass NgramProperty;
406bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward {
4107e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 {
4207e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402
436bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward
446bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass HeaderPolicy;
456bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanaginamespace backward {
4607e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanaginamespace v402 {
476bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass TerminalPositionLookupTable;
486bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
496bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagiclass Ver4BigramListPolicy : public DictionaryBigramsStructurePolicy {
506bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi public:
516bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    Ver4BigramListPolicy(BigramDictContent *const bigramDictContent,
526bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            const TerminalPositionLookupTable *const terminalPositionLookupTable,
536bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            const HeaderPolicy *const headerPolicy)
546bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            : mBigramDictContent(bigramDictContent),
556bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi              mTerminalPositionLookupTable(terminalPositionLookupTable),
566bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi              mHeaderPolicy(headerPolicy) {}
576bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
586bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    void getNextBigram(int *const outBigramPos, int *const outProbability,
596bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            bool *const outHasNext, int *const bigramEntryPos) const;
606bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
613225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi    bool skipAllBigrams(int *const pos) const {
626bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi        // Do nothing because we don't need to skip bigram lists in ver4 dictionaries.
633225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi        return true;
646bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    }
656bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
666bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    bool addNewEntry(const int terminalId, const int newTargetTerminalId,
6779bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi            const NgramProperty *const ngramProperty, bool *const outAddedNewEntry);
686bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
696bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    bool removeEntry(const int terminalId, const int targetTerminalId);
706bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
716bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    bool updateAllBigramEntriesAndDeleteUselessEntries(const int terminalId,
726bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            int *const outBigramCount);
736bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
746bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    int getBigramEntryConut(const int terminalId);
756bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
766bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi private:
776bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    DISALLOW_IMPLICIT_CONSTRUCTORS(Ver4BigramListPolicy);
786bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
796bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    int getEntryPosToUpdate(const int targetTerminalIdToFind, const int bigramListPos,
806bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi            int *const outTailEntryPos) const;
816bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
826bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    const BigramEntry createUpdatedBigramEntryFrom(const BigramEntry *const originalBigramEntry,
8379bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi            const NgramProperty *const ngramProperty) const;
846bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
856bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    bool updateHasNextFlag(const bool hasNext, const int bigramEntryPos);
866bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi
876bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    BigramDictContent *const mBigramDictContent;
886bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    const TerminalPositionLookupTable *const mTerminalPositionLookupTable;
896bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi    const HeaderPolicy *const mHeaderPolicy;
906bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi};
9107e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi} // namespace v402
926bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace backward
936bf268132d60061fd26bd8cba63a12b56b22056eKeisuke Kuroyanagi} // namespace latinime
9407e14126318f7661f76fdce421d723d64e7ea8deKeisuke Kuroyanagi#endif /* LATINIME_BACKWARD_V402_VER4_BIGRAM_LIST_POLICY_H */
95