1668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi/* 2668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * Copyright (C) 2013 The Android Open Source Project 3668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * 4668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 5668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * you may not use this file except in compliance with the License. 6668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * You may obtain a copy of the License at 7668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * 8668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 9668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * 10668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 11668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 12668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * See the License for the specific language governing permissions and 14668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi * limitations under the License. 15668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi */ 16668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 17668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi#ifndef LATINIME_BIGRAM_LIST_POLICY_H 18668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi#define LATINIME_BIGRAM_LIST_POLICY_H 19668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 20cafab169cdb21244c82b99c09983c98066113d87Ken Wakasa#include <cstdint> 21668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 22668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi#include "defines.h" 2388bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/interface/dictionary_bigrams_structure_policy.h" 2488bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.h" 25d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi#include "utils/byte_array_view.h" 26668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 27668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanaginamespace latinime { 28668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 29668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagiclass BigramListPolicy : public DictionaryBigramsStructurePolicy { 30668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi public: 31d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi BigramListPolicy(const ReadOnlyByteArrayView buffer) : mBuffer(buffer) {} 32668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 33668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi ~BigramListPolicy() {} 34668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 35668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi void getNextBigram(int *const outBigramPos, int *const outProbability, bool *const outHasNext, 36668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi int *const pos) const { 3777ef75cbe6722d1eb45115c1ad82f963444d71cdKeisuke Kuroyanagi BigramListReadWriteUtils::BigramFlags flags; 38d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi if (!BigramListReadWriteUtils::getBigramEntryPropertiesAndAdvancePosition(mBuffer, &flags, 39d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi outBigramPos, pos)) { 40d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi AKLOGE("Cannot read bigram entry. bufSize: %zd, pos: %d. ", mBuffer.size(), *pos); 413225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi *outProbability = NOT_A_PROBABILITY; 423225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi *outHasNext = false; 433225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi return; 443225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi } 45202e416b51ef4cf3553afeb305ca4b14dd6105e5Keisuke Kuroyanagi *outProbability = BigramListReadWriteUtils::getProbabilityFromFlags(flags); 46202e416b51ef4cf3553afeb305ca4b14dd6105e5Keisuke Kuroyanagi *outHasNext = BigramListReadWriteUtils::hasNext(flags); 47668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi } 48668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 493225b6fe66a84ed7f499daf84d085141a66bb346Keisuke Kuroyanagi bool skipAllBigrams(int *const pos) const { 50d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi return BigramListReadWriteUtils::skipExistingBigrams(mBuffer, pos); 51668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi } 52668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 53668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi private: 54668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi DISALLOW_IMPLICIT_CONSTRUCTORS(BigramListPolicy); 55668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi 56d01eb3c94c29d2fe0a9974c0dc7e3cfe5d26032bKeisuke Kuroyanagi const ReadOnlyByteArrayView mBuffer; 57668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi}; 58668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi} // namespace latinime 59668870be431d17ee4ceb5ce161aee1189063af18Keisuke Kuroyanagi#endif // LATINIME_BIGRAM_LIST_POLICY_H 60