prev_words_info.h revision b94ec1437b624a45ad5c0fde2dd385116e5e1163
1b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi/*
2b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
3b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi *
4b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
5b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
6b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * You may obtain a copy of the License at
7b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi *
8b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
9b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi *
10b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
11b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
12b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * See the License for the specific language governing permissions and
14b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi * limitations under the License.
15b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi */
16b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
17b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi#ifndef LATINIME_PREV_WORDS_INFO_H
18b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi#define LATINIME_PREV_WORDS_INFO_H
19b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
20b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi#include "defines.h"
21b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
22b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanaginamespace latinime {
23b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
24b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi// TODO: Support n-gram.
25b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi// TODO: Support beginning of sentence.
26b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi// This class does not take ownership of any code point buffers.
27b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagiclass PrevWordsInfo {
28b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi public:
29b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    // No prev word information.
30b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    PrevWordsInfo() {
31b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        clear();
32b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    }
33b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
34b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    PrevWordsInfo(const int *const prevWordCodePoints, const int prevWordCodePointCount,
35b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi            const bool isBeginningOfSentence) {
36b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        clear();
37b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        mPrevWordCodePoints[0] = prevWordCodePoints;
38b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        mPrevWordCodePointCount[0] = prevWordCodePointCount;
39b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        mIsBeginningOfSentence[0] = isBeginningOfSentence;
40b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    }
41b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    const int *getPrevWordCodePoints() const {
42b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        return mPrevWordCodePoints[0];
43b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    }
44b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
45b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    int getPrevWordCodePointCount() const {
46b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        return mPrevWordCodePointCount[0];
47b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    }
48b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
49b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi private:
50b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi    DISALLOW_COPY_AND_ASSIGN(PrevWordsInfo);
51b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi
52b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    void clear() {
53b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        for (size_t i = 0; i < NELEMS(mPrevWordCodePoints); ++i) {
54b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi            mPrevWordCodePoints[i] = nullptr;
55b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi            mPrevWordCodePointCount[i] = 0;
56b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi            mIsBeginningOfSentence[i] = false;
57b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi        }
58b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    }
59b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi
60b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    const int *mPrevWordCodePoints[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
61b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    int mPrevWordCodePointCount[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
62b94ec1437b624a45ad5c0fde2dd385116e5e1163Keisuke Kuroyanagi    bool mIsBeginningOfSentence[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
63b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi};
64b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi} // namespace latinime
65b87fffb8be3dc6a79e49890a7700704d7fee616bKeisuke Kuroyanagi#endif // LATINIME_PREV_WORDS_INFO_H
66