1e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi/*
2e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
3e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi *
4e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
5e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
6e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * You may obtain a copy of the License at
7e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi *
8e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
9e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi *
10e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
11e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
12e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * See the License for the specific language governing permissions and
14e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi * limitations under the License.
15e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi */
16e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
1779bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi#ifndef LATINIME_NGRAM_PROPERTY_H
1879bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi#define LATINIME_NGRAM_PROPERTY_H
19e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
20e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#include <vector>
21e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
22e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#include "defines.h"
2388bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/property/historical_info.h"
2488bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/property/ngram_context.h"
25e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
26e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanaginamespace latinime {
27e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
2879bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagiclass NgramProperty {
29e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi public:
3088bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi    NgramProperty(const NgramContext &ngramContext, const std::vector<int> &&targetCodePoints,
3188bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi            const int probability, const HistoricalInfo historicalInfo)
3288bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi            : mNgramContext(ngramContext), mTargetCodePoints(std::move(targetCodePoints)),
3388bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi              mProbability(probability), mHistoricalInfo(historicalInfo) {}
3488bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi
3588bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi    const NgramContext *getNgramContext() const {
3688bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi        return &mNgramContext;
3788bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi    }
38e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
39e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    const std::vector<int> *getTargetCodePoints() const {
40e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi        return &mTargetCodePoints;
41e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    }
42e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
43e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    int getProbability() const {
44e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi        return mProbability;
45e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    }
46e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
47287e155e44b4e937f2a62d010805702bc813c43bKeisuke Kuroyanagi    const HistoricalInfo getHistoricalInfo() const {
48287e155e44b4e937f2a62d010805702bc813c43bKeisuke Kuroyanagi        return mHistoricalInfo;
49e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    }
50e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
51e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi private:
52620ebde70490473fd3562f70d1f24d7d53b6fb1cKeisuke Kuroyanagi    // Default copy constructor is used for using in std::vector.
5379bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi    DISALLOW_DEFAULT_CONSTRUCTOR(NgramProperty);
54620ebde70490473fd3562f70d1f24d7d53b6fb1cKeisuke Kuroyanagi    DISALLOW_ASSIGNMENT_OPERATOR(NgramProperty);
55e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
5688bb28c132d87f15a52e9a0b8a45950f39eb19adKeisuke Kuroyanagi    const NgramContext mNgramContext;
57620ebde70490473fd3562f70d1f24d7d53b6fb1cKeisuke Kuroyanagi    const std::vector<int> mTargetCodePoints;
58620ebde70490473fd3562f70d1f24d7d53b6fb1cKeisuke Kuroyanagi    const int mProbability;
59620ebde70490473fd3562f70d1f24d7d53b6fb1cKeisuke Kuroyanagi    const HistoricalInfo mHistoricalInfo;
60e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi};
61e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi} // namespace latinime
6279bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi#endif // LATINIME_NGRAM_PROPERTY_H
63