150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi/* 250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * Copyright (C) 2013 The Android Open Source Project 350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * 450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * you may not use this file except in compliance with the License. 650db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * You may obtain a copy of the License at 750db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * 850db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 950db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * 1050db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 1150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 1250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * See the License for the specific language governing permissions and 1450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi * limitations under the License. 1550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi */ 1650db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 1750db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi#ifndef LATINIME_SUGGEST_OPTIONS_H 1850db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi#define LATINIME_SUGGEST_OPTIONS_H 1950db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 2050db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi#include "defines.h" 2150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 2250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanaginamespace latinime { 2350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 2450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagiclass SuggestOptions{ 2550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi public: 26338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi SuggestOptions(const int *const options, const int length) 27338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi : mOptions(options), mLength(length) {} 28338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi 2950db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi AK_FORCE_INLINE bool isGesture() const { 3050db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return getBoolOption(IS_GESTURE); 3150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 3250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 3350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi AK_FORCE_INLINE bool useFullEditDistance() const { 3450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return getBoolOption(USE_FULL_EDIT_DISTANCE); 3550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 3650db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 37338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi AK_FORCE_INLINE bool getAdditionalFeaturesBoolOption(const int key) const { 38338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi return getBoolOption(key + ADDITIONAL_FEATURES_OPTIONS); 39338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi } 4050db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 4150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi private: 4229432f843a8cd6ffb2be286104964592e80d77c9Ken Wakasa DISALLOW_IMPLICIT_CONSTRUCTORS(SuggestOptions); 4329432f843a8cd6ffb2be286104964592e80d77c9Ken Wakasa 4450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi // Need to update com.android.inputmethod.latin.NativeSuggestOptions when you add, remove or 4550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi // reorder options. 4650db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi static const int IS_GESTURE = 0; 4750db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi static const int USE_FULL_EDIT_DISTANCE = 1; 48338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi // Additional features options are stored after the other options and used as setting values of 49338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi // experimental features. 50338ef65077f43d6a35665a5c8eb6a44928332547Keisuke Kuroyanagi static const int ADDITIONAL_FEATURES_OPTIONS = 2; 5150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 5250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi const int *const mOptions; 5350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi const int mLength; 5450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 5550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi AK_FORCE_INLINE bool isValidKey(const int key) const { 5650db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return 0 <= key && key < mLength; 5750db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 5850db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 5950db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi AK_FORCE_INLINE bool getBoolOption(const int key) const { 6050db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi if (isValidKey(key)) { 6150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return mOptions[key] != 0; 6250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 6350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return false; 6450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 6550db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi 6650db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi AK_FORCE_INLINE int getIntOption(const int key) const { 6750db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi if (isValidKey(key)) { 6850db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return mOptions[key]; 6950db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 7050db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi return 0; 7150db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi } 7250db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi}; 7350db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi} // namespace latinime 7450db5f0fffdc35e9fe0bed27e7d630d571727e06Keisuke Kuroyanagi#endif // LATINIME_SUGGEST_OPTIONS_H 75