1e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi/*
2e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
3e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi *
4e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
5e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * you may not use this file except in compliance with the License.
6e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * You may obtain a copy of the License at
7e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi *
8e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
9e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi *
10e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
11e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
12e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * See the License for the specific language governing permissions and
14e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi * limitations under the License.
15e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi */
16e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
17e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi#ifndef LATINIME_SUGGESTED_WORD_H
18e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi#define LATINIME_SUGGESTED_WORD_H
19e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
20e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi#include <vector>
21e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
22e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi#include "defines.h"
23e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi#include "suggest/core/dictionary/dictionary.h"
24e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
25e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanaginamespace latinime {
26e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
27e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagiclass SuggestedWord {
28e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi public:
29e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    class Comparator {
30e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi     public:
31e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        bool operator()(const SuggestedWord &left, const SuggestedWord &right) {
32e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi            if (left.getScore() != right.getScore()) {
335dc17c22ca88cf1dcf2225d8b252bcfa8c84d364Keisuke Kuroyanagi                return left.getScore() > right.getScore();
34e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi            }
355dc17c22ca88cf1dcf2225d8b252bcfa8c84d364Keisuke Kuroyanagi            return left.getCodePointCount() < right.getCodePointCount();
36e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        }
37e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
38e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi     private:
39e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        DISALLOW_ASSIGNMENT_OPERATOR(Comparator);
40e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    };
41e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
42e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    SuggestedWord(const int *const codePoints, const int codePointCount,
43e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi            const int score, const int type, const int indexToPartialCommit,
44e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi            const int autoCommitFirstWordConfidence)
45e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi            : mCodePoints(codePoints, codePoints + codePointCount), mScore(score),
46e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi              mType(type), mIndexToPartialCommit(indexToPartialCommit),
47e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi              mAutoCommitFirstWordConfidence(autoCommitFirstWordConfidence) {}
48e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
49e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    const int *getCodePoint() const {
50e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        return &mCodePoints.at(0);
51e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    }
52e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
53e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int getCodePointCount() const {
54e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        return mCodePoints.size();
55e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    }
56e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
57e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int getScore() const {
58e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        return mScore;
59e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    }
60e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
61e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int getType() const {
62e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        return mType;
63e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    }
64e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
65e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int getIndexToPartialCommit() const {
66e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        return mIndexToPartialCommit;
67e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    }
68e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
69e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int getAutoCommitFirstWordConfidence() const {
70e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi        return mAutoCommitFirstWordConfidence;
71e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    }
72e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
73e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi private:
74e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    DISALLOW_DEFAULT_CONSTRUCTOR(SuggestedWord);
75e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi
76e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    std::vector<int> mCodePoints;
77e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int mScore;
78e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int mType;
79e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int mIndexToPartialCommit;
80e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi    int mAutoCommitFirstWordConfidence;
81e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi};
82e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi} // namespace latinime
83e137ec0a91cf93b0a99fd1e1556ee835d026f731Keisuke Kuroyanagi#endif /* LATINIME_SUGGESTED_WORD_H */
84