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_BINARY_DICTIONARY_BIGRAMS_ITERATOR_H 18 #define LATINIME_BINARY_DICTIONARY_BIGRAMS_ITERATOR_H 19 20 #include "defines.h" 21 #include "dictionary/interface/dictionary_bigrams_structure_policy.h" 22 23 namespace latinime { 24 25 class BinaryDictionaryBigramsIterator { 26 public: 27 // Empty iterator. BinaryDictionaryBigramsIterator()28 BinaryDictionaryBigramsIterator() 29 : mBigramsStructurePolicy(nullptr), mPos(NOT_A_DICT_POS), 30 mBigramPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY), mHasNext(false) {} 31 BinaryDictionaryBigramsIterator(const DictionaryBigramsStructurePolicy * const bigramsStructurePolicy,const int pos)32 BinaryDictionaryBigramsIterator( 33 const DictionaryBigramsStructurePolicy *const bigramsStructurePolicy, const int pos) 34 : mBigramsStructurePolicy(bigramsStructurePolicy), mPos(pos), 35 mBigramPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY), 36 mHasNext(pos != NOT_A_DICT_POS) {} 37 BinaryDictionaryBigramsIterator(BinaryDictionaryBigramsIterator && bigramsIterator)38 BinaryDictionaryBigramsIterator(BinaryDictionaryBigramsIterator &&bigramsIterator) noexcept 39 : mBigramsStructurePolicy(bigramsIterator.mBigramsStructurePolicy), 40 mPos(bigramsIterator.mPos), mBigramPos(bigramsIterator.mBigramPos), 41 mProbability(bigramsIterator.mProbability), mHasNext(bigramsIterator.mHasNext) {} 42 hasNext()43 AK_FORCE_INLINE bool hasNext() const { 44 return mHasNext; 45 } 46 next()47 AK_FORCE_INLINE void next() { 48 mBigramsStructurePolicy->getNextBigram(&mBigramPos, &mProbability, &mHasNext, &mPos); 49 } 50 getProbability()51 AK_FORCE_INLINE int getProbability() const { 52 return mProbability; 53 } 54 getBigramPos()55 AK_FORCE_INLINE int getBigramPos() const { 56 return mBigramPos; 57 } 58 59 private: 60 DISALLOW_COPY_AND_ASSIGN(BinaryDictionaryBigramsIterator); 61 62 const DictionaryBigramsStructurePolicy *const mBigramsStructurePolicy; 63 int mPos; 64 int mBigramPos; 65 int mProbability; 66 bool mHasNext; 67 }; 68 } // namespace latinime 69 #endif // LATINIME_BINARY_DICTIONARY_BIGRAMS_ITERATOR_H 70