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