/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef LATINIME_NGRAM_PROPERTY_H
#define LATINIME_NGRAM_PROPERTY_H

#include <vector>

#include "defines.h"
#include "dictionary/property/historical_info.h"
#include "dictionary/property/ngram_context.h"

namespace latinime {

class NgramProperty {
 public:
    NgramProperty(const NgramContext &ngramContext, const std::vector<int> &&targetCodePoints,
            const int probability, const HistoricalInfo historicalInfo)
            : mNgramContext(ngramContext), mTargetCodePoints(std::move(targetCodePoints)),
              mProbability(probability), mHistoricalInfo(historicalInfo) {}

    const NgramContext *getNgramContext() const {
        return &mNgramContext;
    }

    const std::vector<int> *getTargetCodePoints() const {
        return &mTargetCodePoints;
    }

    int getProbability() const {
        return mProbability;
    }

    const HistoricalInfo getHistoricalInfo() const {
        return mHistoricalInfo;
    }

 private:
    // Default copy constructor is used for using in std::vector.
    DISALLOW_DEFAULT_CONSTRUCTOR(NgramProperty);
    DISALLOW_ASSIGNMENT_OPERATOR(NgramProperty);

    const NgramContext mNgramContext;
    const std::vector<int> mTargetCodePoints;
    const int mProbability;
    const HistoricalInfo mHistoricalInfo;
};
} // namespace latinime
#endif // LATINIME_NGRAM_PROPERTY_H