Home | History | Annotate | Download | only in property
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef LATINIME_UNIGRAM_PROPERTY_H
     18 #define LATINIME_UNIGRAM_PROPERTY_H
     19 
     20 #include <vector>
     21 
     22 #include "defines.h"
     23 #include "dictionary/property/historical_info.h"
     24 
     25 namespace latinime {
     26 
     27 class UnigramProperty {
     28  public:
     29     class ShortcutProperty {
     30      public:
     31         ShortcutProperty(const std::vector<int> &&targetCodePoints, const int probability)
     32                 : mTargetCodePoints(std::move(targetCodePoints)),
     33                   mProbability(probability) {}
     34 
     35         const std::vector<int> *getTargetCodePoints() const {
     36             return &mTargetCodePoints;
     37         }
     38 
     39         int getProbability() const {
     40             return mProbability;
     41         }
     42 
     43      private:
     44         // Default copy constructor is used for using in std::vector.
     45         DISALLOW_DEFAULT_CONSTRUCTOR(ShortcutProperty);
     46 
     47         const std::vector<int> mTargetCodePoints;
     48         const int mProbability;
     49     };
     50 
     51     UnigramProperty()
     52             : mRepresentsBeginningOfSentence(false), mIsNotAWord(false),
     53               mIsBlacklisted(false), mIsPossiblyOffensive(false), mProbability(NOT_A_PROBABILITY),
     54               mHistoricalInfo(), mShortcuts() {}
     55 
     56     // In contexts which do not support the Blacklisted flag (v2, v4<403)
     57     UnigramProperty(const bool representsBeginningOfSentence, const bool isNotAWord,
     58             const bool isPossiblyOffensive, const int probability,
     59             const HistoricalInfo historicalInfo, const std::vector<ShortcutProperty> &&shortcuts)
     60             : mRepresentsBeginningOfSentence(representsBeginningOfSentence),
     61               mIsNotAWord(isNotAWord), mIsBlacklisted(false),
     62               mIsPossiblyOffensive(isPossiblyOffensive), mProbability(probability),
     63               mHistoricalInfo(historicalInfo), mShortcuts(std::move(shortcuts)) {}
     64 
     65     // Without shortcuts, in contexts which do not support the Blacklisted flag (v2, v4<403)
     66     UnigramProperty(const bool representsBeginningOfSentence, const bool isNotAWord,
     67             const bool isPossiblyOffensive, const int probability,
     68             const HistoricalInfo historicalInfo)
     69             : mRepresentsBeginningOfSentence(representsBeginningOfSentence),
     70               mIsNotAWord(isNotAWord), mIsBlacklisted(false),
     71               mIsPossiblyOffensive(isPossiblyOffensive), mProbability(probability),
     72               mHistoricalInfo(historicalInfo), mShortcuts() {}
     73 
     74     // In contexts which DO support the Blacklisted flag (v403)
     75     UnigramProperty(const bool representsBeginningOfSentence, const bool isNotAWord,
     76             const bool isBlacklisted, const bool isPossiblyOffensive, const int probability,
     77             const HistoricalInfo historicalInfo, const std::vector<ShortcutProperty> &&shortcuts)
     78             : mRepresentsBeginningOfSentence(representsBeginningOfSentence),
     79               mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted),
     80               mIsPossiblyOffensive(isPossiblyOffensive), mProbability(probability),
     81               mHistoricalInfo(historicalInfo), mShortcuts(std::move(shortcuts)) {}
     82 
     83     // Without shortcuts, in contexts which DO support the Blacklisted flag (v403)
     84     UnigramProperty(const bool representsBeginningOfSentence, const bool isNotAWord,
     85             const bool isBlacklisted, const bool isPossiblyOffensive, const int probability,
     86             const HistoricalInfo historicalInfo)
     87             : mRepresentsBeginningOfSentence(representsBeginningOfSentence),
     88               mIsNotAWord(isNotAWord), mIsBlacklisted(isBlacklisted),
     89               mIsPossiblyOffensive(isPossiblyOffensive), mProbability(probability),
     90               mHistoricalInfo(historicalInfo), mShortcuts() {}
     91 
     92     bool representsBeginningOfSentence() const {
     93         return mRepresentsBeginningOfSentence;
     94     }
     95 
     96     bool isNotAWord() const {
     97         return mIsNotAWord;
     98     }
     99 
    100     bool isPossiblyOffensive() const {
    101         return mIsPossiblyOffensive;
    102     }
    103 
    104     bool isBlacklisted() const {
    105         return mIsBlacklisted;
    106     }
    107 
    108     bool hasShortcuts() const {
    109         return !mShortcuts.empty();
    110     }
    111 
    112     int getProbability() const {
    113         return mProbability;
    114     }
    115 
    116     const HistoricalInfo getHistoricalInfo() const {
    117         return mHistoricalInfo;
    118     }
    119 
    120     const std::vector<ShortcutProperty> &getShortcuts() const {
    121         return mShortcuts;
    122     }
    123 
    124  private:
    125     // Default copy constructor is used for using as a return value.
    126     DISALLOW_ASSIGNMENT_OPERATOR(UnigramProperty);
    127 
    128     const bool mRepresentsBeginningOfSentence;
    129     const bool mIsNotAWord;
    130     const bool mIsBlacklisted;
    131     const bool mIsPossiblyOffensive;
    132     const int mProbability;
    133     const HistoricalInfo mHistoricalInfo;
    134     const std::vector<ShortcutProperty> mShortcuts;
    135 };
    136 } // namespace latinime
    137 #endif // LATINIME_UNIGRAM_PROPERTY_H
    138