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
17e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#ifndef LATINIME_WORD_PROPERTY_H
18e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#define LATINIME_WORD_PROPERTY_H
19e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
20e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#include <vector>
21e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
22e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#include "defines.h"
2388bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/property/ngram_property.h"
2488bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/property/unigram_property.h"
25bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi#include "utils/int_array_view.h"
26e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
27e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanaginamespace latinime {
28e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
29e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi// This class is used for returning information belonging to a word to java side.
30e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagiclass WordProperty {
31e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi public:
32e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    // Default constructor is used to create an instance that indicates an invalid word.
33e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    WordProperty()
3479bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi            : mCodePoints(), mUnigramProperty(), mNgrams() {}
35e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
36bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi    WordProperty(const std::vector<int> &&codePoints, const UnigramProperty &unigramProperty,
37bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi            const std::vector<NgramProperty> &ngrams)
38bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi            : mCodePoints(std::move(codePoints)), mUnigramProperty(unigramProperty),
39bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi              mNgrams(ngrams) {}
40e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
41bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi    const CodePointArrayView getCodePoints() const {
42bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi        return CodePointArrayView(mCodePoints);
438a9d9de72a9ab02cb4726c205213d4f0b9f58e07Keisuke Kuroyanagi    }
448a9d9de72a9ab02cb4726c205213d4f0b9f58e07Keisuke Kuroyanagi
45bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi    const UnigramProperty &getUnigramProperty() const {
46bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi        return mUnigramProperty;
47bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi    }
48bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi
49bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi    const std::vector<NgramProperty> &getNgramProperties() const {
50bbf0d4141bf4c5ee1026a8dfe45d46a416ad35b1Keisuke Kuroyanagi        return mNgrams;
518a9d9de72a9ab02cb4726c205213d4f0b9f58e07Keisuke Kuroyanagi    }
528a9d9de72a9ab02cb4726c205213d4f0b9f58e07Keisuke Kuroyanagi
53e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi private:
54e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    // Default copy constructor is used for using as a return value.
55e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    DISALLOW_ASSIGNMENT_OPERATOR(WordProperty);
56e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi
57e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    const std::vector<int> mCodePoints;
58e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi    const UnigramProperty mUnigramProperty;
5979bb37d499ed6fcabe981153d5ff0b5b69509933Keisuke Kuroyanagi    const std::vector<NgramProperty> mNgrams;
60e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi};
61e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi} // namespace latinime
62e41b2ed8d31b84308f77a0bd14c5eecc5a17960aKeisuke Kuroyanagi#endif // LATINIME_WORD_PROPERTY_H
63