binary_dictionary_bigrams_iterator.h revision b00973952f269ebee6d1d5f808fad7ca64fb9954
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 "suggest/core/policy/dictionary_bigrams_structure_policy.h"
22
23namespace latinime {
24
25class BinaryDictionaryBigramsIterator {
26 public:
27    // Empty iterator.
28    BinaryDictionaryBigramsIterator()
29           : mBigramsStructurePolicy(nullptr), mPos(NOT_A_DICT_POS),
30             mBigramPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY), mHasNext(false) {}
31
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
38    BinaryDictionaryBigramsIterator(BinaryDictionaryBigramsIterator &&bigramsIterator)
39            : mBigramsStructurePolicy(bigramsIterator.mBigramsStructurePolicy),
40              mPos(bigramsIterator.mPos), mBigramPos(bigramsIterator.mBigramPos),
41              mProbability(bigramsIterator.mProbability), mHasNext(bigramsIterator.mHasNext) {}
42
43    AK_FORCE_INLINE bool hasNext() const {
44        return mHasNext;
45    }
46
47    AK_FORCE_INLINE void next() {
48        mBigramsStructurePolicy->getNextBigram(&mBigramPos, &mProbability, &mHasNext, &mPos);
49    }
50
51    AK_FORCE_INLINE int getProbability() const {
52        return mProbability;
53    }
54
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