aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2013-05-29 17:18:03 -0700
committerKeisuke Kuroyanagi <ksk@google.com>2013-05-29 17:18:03 -0700
commit338ef65077f43d6a35665a5c8eb6a44928332547 (patch)
treeb2d3c7e227c49b6527602591b55170b31611b6e1
parent94af6d9e7f779fad4886d70fcac26844ecdc0c15 (diff)
downloadlatinime-338ef65077f43d6a35665a5c8eb6a44928332547.tar.gz
latinime-338ef65077f43d6a35665a5c8eb6a44928332547.tar.xz
latinime-338ef65077f43d6a35665a5c8eb6a44928332547.zip
Make DicTraverseSession having suggest options.
Change-Id: I2b802c06634e5226c763fd838f3fc0918fc4a161
-rw-r--r--native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp9
-rw-r--r--native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp6
-rw-r--r--native/jni/src/dic_traverse_wrapper.cpp2
-rw-r--r--native/jni/src/dic_traverse_wrapper.h12
-rw-r--r--native/jni/src/dictionary.cpp17
-rw-r--r--native/jni/src/dictionary.h7
-rw-r--r--native/jni/src/suggest/core/session/dic_traverse_session.cpp8
-rw-r--r--native/jni/src/suggest/core/session/dic_traverse_session.h8
-rw-r--r--native/jni/src/suggest_options.h11
9 files changed, 50 insertions, 30 deletions
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 0e9c29261..03b3c6028 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -162,7 +162,7 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, j
const jsize numberOfOptions = env->GetArrayLength(suggestOptions);
int options[numberOfOptions];
env->GetIntArrayRegion(suggestOptions, 0, numberOfOptions, options);
- SuggestOptions givenOptions(options, numberOfOptions);
+ SuggestOptions givenSuggestOptions(options, numberOfOptions);
// Output values
/* By the way, let's check the output array length here to make sure */
@@ -190,12 +190,11 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, j
memset(outputTypes, 0, sizeof(outputTypes));
int count;
- if (givenOptions.isGesture() || inputSize > 0) {
+ if (givenSuggestOptions.isGesture() || inputSize > 0) {
count = dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates,
times, pointerIds, inputCodePoints, inputSize, prevWordCodePoints,
- prevWordCodePointsLength, commitPoint, givenOptions.isGesture(),
- givenOptions.useFullEditDistance(), outputCodePoints, scores,
- spaceIndices, outputTypes);
+ prevWordCodePointsLength, commitPoint, &givenSuggestOptions, outputCodePoints,
+ scores, spaceIndices, outputTypes);
} else {
count = dictionary->getBigrams(prevWordCodePoints, prevWordCodePointsLength,
inputCodePoints, inputSize, outputCodePoints, scores, outputTypes);
diff --git a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp
index dfe3b09d8..08124ffc8 100644
--- a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp
+++ b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp
@@ -34,12 +34,14 @@ static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong tra
void *ts = reinterpret_cast<void *>(traverseSession);
Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary);
if (!previousWord) {
- DicTraverseWrapper::initDicTraverseSession(ts, dict, 0, 0);
+ DicTraverseWrapper::initDicTraverseSession(
+ ts, dict, 0 /* prevWord */, 0 /* prevWordLength*/, 0 /* suggestOptions */);
return;
}
int prevWord[previousWordLength];
env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord);
- DicTraverseWrapper::initDicTraverseSession(ts, dict, prevWord, previousWordLength);
+ DicTraverseWrapper::initDicTraverseSession(
+ ts, dict, prevWord, previousWordLength, 0 /* suggestOptions */);
}
static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) {
diff --git a/native/jni/src/dic_traverse_wrapper.cpp b/native/jni/src/dic_traverse_wrapper.cpp
index 88ca9fa0d..ec8c62dcc 100644
--- a/native/jni/src/dic_traverse_wrapper.cpp
+++ b/native/jni/src/dic_traverse_wrapper.cpp
@@ -22,5 +22,5 @@ namespace latinime {
void *(*DicTraverseWrapper::sDicTraverseSessionFactoryMethod)(JNIEnv *, jstring) = 0;
void (*DicTraverseWrapper::sDicTraverseSessionReleaseMethod)(void *) = 0;
void (*DicTraverseWrapper::sDicTraverseSessionInitMethod)(
- void *, const Dictionary *const, const int *, const int) = 0;
+ void *, const Dictionary *const, const int *, const int, const SuggestOptions *const) = 0;
} // namespace latinime
diff --git a/native/jni/src/dic_traverse_wrapper.h b/native/jni/src/dic_traverse_wrapper.h
index 1108a45c8..43b4c9ade 100644
--- a/native/jni/src/dic_traverse_wrapper.h
+++ b/native/jni/src/dic_traverse_wrapper.h
@@ -22,6 +22,7 @@
namespace latinime {
class Dictionary;
+class SuggestOptions;
// TODO: Remove
class DicTraverseWrapper {
public:
@@ -32,9 +33,11 @@ class DicTraverseWrapper {
return 0;
}
static void initDicTraverseSession(void *traverseSession, const Dictionary *const dictionary,
- const int *prevWord, const int prevWordLength) {
+ const int *prevWord, const int prevWordLength,
+ const SuggestOptions *const suggestOptions) {
if (sDicTraverseSessionInitMethod) {
- sDicTraverseSessionInitMethod(traverseSession, dictionary, prevWord, prevWordLength);
+ sDicTraverseSessionInitMethod(
+ traverseSession, dictionary, prevWord, prevWordLength, suggestOptions);
}
}
static void releaseDicTraverseSession(void *traverseSession) {
@@ -46,7 +49,8 @@ class DicTraverseWrapper {
sDicTraverseSessionFactoryMethod = factoryMethod;
}
static void setTraverseSessionInitMethod(
- void (*initMethod)(void *, const Dictionary *const, const int *, const int)) {
+ void (*initMethod)(void *, const Dictionary *const, const int *, const int,
+ const SuggestOptions *const)) {
sDicTraverseSessionInitMethod = initMethod;
}
static void setTraverseSessionReleaseMethod(void (*releaseMethod)(void *)) {
@@ -57,7 +61,7 @@ class DicTraverseWrapper {
DISALLOW_IMPLICIT_CONSTRUCTORS(DicTraverseWrapper);
static void *(*sDicTraverseSessionFactoryMethod)(JNIEnv *, jstring);
static void (*sDicTraverseSessionInitMethod)(
- void *, const Dictionary *const, const int *, const int);
+ void *, const Dictionary *const, const int *, const int, const SuggestOptions *const);
static void (*sDicTraverseSessionReleaseMethod)(void *);
};
} // namespace latinime
diff --git a/native/jni/src/dictionary.cpp b/native/jni/src/dictionary.cpp
index dadb2bab2..d9ed0fe49 100644
--- a/native/jni/src/dictionary.cpp
+++ b/native/jni/src/dictionary.cpp
@@ -25,6 +25,7 @@
#include "binary_format.h"
#include "defines.h"
#include "dic_traverse_wrapper.h"
+#include "suggest_options.h"
#include "suggest/core/suggest.h"
#include "suggest/policyimpl/gesture/gesture_suggest_policy_factory.h"
#include "suggest/policyimpl/typing/typing_suggest_policy_factory.h"
@@ -53,13 +54,13 @@ Dictionary::~Dictionary() {
int Dictionary::getSuggestions(ProximityInfo *proximityInfo, void *traverseSession,
int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
- int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, bool isGesture,
- bool useFullEditDistance, int *outWords, int *frequencies, int *spaceIndices,
- int *outputTypes) const {
+ int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint,
+ const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
+ int *spaceIndices, int *outputTypes) const {
int result = 0;
- if (isGesture) {
+ if (suggestOptions->isGesture()) {
DicTraverseWrapper::initDicTraverseSession(
- traverseSession, this, prevWordCodePoints, prevWordLength);
+ traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
result = mGestureSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords,
frequencies, spaceIndices, outputTypes);
@@ -70,7 +71,7 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, void *traverseSessi
} else {
if (USE_SUGGEST_INTERFACE_FOR_TYPING) {
DicTraverseWrapper::initDicTraverseSession(
- traverseSession, this, prevWordCodePoints, prevWordLength);
+ traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
result = mTypingSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint,
outWords, frequencies, spaceIndices, outputTypes);
@@ -84,8 +85,8 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, void *traverseSessi
mBigramDictionary->fillBigramAddressToProbabilityMapAndFilter(prevWordCodePoints,
prevWordLength, &bigramMap, bigramFilter);
result = mUnigramDictionary->getSuggestions(proximityInfo, xcoordinates, ycoordinates,
- inputCodePoints, inputSize, &bigramMap, bigramFilter, useFullEditDistance,
- outWords, frequencies, outputTypes);
+ inputCodePoints, inputSize, &bigramMap, bigramFilter,
+ suggestOptions->useFullEditDistance(), outWords, frequencies, outputTypes);
return result;
}
}
diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h
index edec83fbf..e6861a3dd 100644
--- a/native/jni/src/dictionary.h
+++ b/native/jni/src/dictionary.h
@@ -26,6 +26,7 @@ namespace latinime {
class BigramDictionary;
class ProximityInfo;
class SuggestInterface;
+class SuggestOptions;
class UnigramDictionary;
class Dictionary {
@@ -54,9 +55,9 @@ class Dictionary {
int getSuggestions(ProximityInfo *proximityInfo, void *traverseSession, int *xcoordinates,
int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize,
- int *prevWordCodePoints, int prevWordLength, int commitPoint, bool isGesture,
- bool useFullEditDistance, int *outWords, int *frequencies, int *spaceIndices,
- int *outputTypes) const;
+ int *prevWordCodePoints, int prevWordLength, int commitPoint,
+ const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
+ int *spaceIndices, int *outputTypes) const;
int getBigrams(const int *word, int length, int *inputCodePoints, int inputSize, int *outWords,
int *frequencies, int *outputTypes) const;
diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.cpp b/native/jni/src/suggest/core/session/dic_traverse_session.cpp
index 6408f0163..f9f1c0915 100644
--- a/native/jni/src/suggest/core/session/dic_traverse_session.cpp
+++ b/native/jni/src/suggest/core/session/dic_traverse_session.cpp
@@ -34,10 +34,11 @@ static void *getSessionInstance(JNIEnv *env, jstring localeStr) {
// TODO: Pass "DicTraverseSession *traverseSession" when the source code structure settles down.
static void initSessionInstance(void *traverseSession, const Dictionary *const dictionary,
- const int *prevWord, const int prevWordLength) {
+ const int *prevWord, const int prevWordLength,
+ const SuggestOptions *const suggestOptions) {
if (traverseSession) {
DicTraverseSession *tSession = static_cast<DicTraverseSession *>(traverseSession);
- tSession->init(dictionary, prevWord, prevWordLength);
+ tSession->init(dictionary, prevWord, prevWordLength, suggestOptions);
}
}
@@ -62,10 +63,11 @@ class TraverseSessionFactoryRegisterer {
static TraverseSessionFactoryRegisterer traverseSessionFactoryRegisterer;
void DicTraverseSession::init(const Dictionary *const dictionary, const int *prevWord,
- int prevWordLength) {
+ int prevWordLength, const SuggestOptions *const suggestOptions) {
mDictionary = dictionary;
mMultiWordCostMultiplier = BinaryFormat::getMultiWordCostMultiplier(mDictionary->getDict(),
mDictionary->getDictSize());
+ mSuggestOptions = suggestOptions;
if (!prevWord) {
mPrevWordPos = NOT_VALID_WORD;
return;
diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.h b/native/jni/src/suggest/core/session/dic_traverse_session.h
index d88be5b88..5aaad032d 100644
--- a/native/jni/src/suggest/core/session/dic_traverse_session.h
+++ b/native/jni/src/suggest/core/session/dic_traverse_session.h
@@ -30,12 +30,13 @@ namespace latinime {
class Dictionary;
class ProximityInfo;
+class SuggestOptions;
class DicTraverseSession {
public:
AK_FORCE_INLINE DicTraverseSession(JNIEnv *env, jstring localeStr)
: mPrevWordPos(NOT_VALID_WORD), mProximityInfo(0),
- mDictionary(0), mDicNodesCache(), mMultiBigramMap(),
+ mDictionary(0), mSuggestOptions(0), mDicNodesCache(), mMultiBigramMap(),
mInputSize(0), mPartiallyCommited(false), mMaxPointerCount(1),
mMultiWordCostMultiplier(1.0f) {
// NOTE: mProximityInfoStates is an array of instances.
@@ -45,7 +46,8 @@ class DicTraverseSession {
// Non virtual inline destructor -- never inherit this class
AK_FORCE_INLINE ~DicTraverseSession() {}
- void init(const Dictionary *dictionary, const int *prevWord, int prevWordLength);
+ void init(const Dictionary *dictionary, const int *prevWord, int prevWordLength,
+ const SuggestOptions *const suggestOptions);
// TODO: Remove and merge into init
void setupForGetSuggestions(const ProximityInfo *pInfo, const int *inputCodePoints,
const int inputSize, const int *const inputXs, const int *const inputYs,
@@ -61,6 +63,7 @@ class DicTraverseSession {
// getters and setters
//--------------------
const ProximityInfo *getProximityInfo() const { return mProximityInfo; }
+ const SuggestOptions *getSuggestOptions() const { return mSuggestOptions; }
int getPrevWordPos() const { return mPrevWordPos; }
// TODO: REMOVE
void setPrevWordPos(int pos) { mPrevWordPos = pos; }
@@ -167,6 +170,7 @@ class DicTraverseSession {
int mPrevWordPos;
const ProximityInfo *mProximityInfo;
const Dictionary *mDictionary;
+ const SuggestOptions *mSuggestOptions;
DicNodesCache mDicNodesCache;
// Temporary cache for bigram frequencies
diff --git a/native/jni/src/suggest_options.h b/native/jni/src/suggest_options.h
index 1bed47c93..e9d7bc8a8 100644
--- a/native/jni/src/suggest_options.h
+++ b/native/jni/src/suggest_options.h
@@ -23,6 +23,9 @@ namespace latinime {
class SuggestOptions{
public:
+ SuggestOptions(const int *const options, const int length)
+ : mOptions(options), mLength(length) {}
+
AK_FORCE_INLINE bool isGesture() const {
return getBoolOption(IS_GESTURE);
}
@@ -31,14 +34,18 @@ class SuggestOptions{
return getBoolOption(USE_FULL_EDIT_DISTANCE);
}
- SuggestOptions(const int *const options, const int length)
- : mOptions(options), mLength(length) {}
+ AK_FORCE_INLINE bool getAdditionalFeaturesBoolOption(const int key) const {
+ return getBoolOption(key + ADDITIONAL_FEATURES_OPTIONS);
+ }
private:
// Need to update com.android.inputmethod.latin.NativeSuggestOptions when you add, remove or
// reorder options.
static const int IS_GESTURE = 0;
static const int USE_FULL_EDIT_DISTANCE = 1;
+ // Additional features options are stored after the other options and used as setting values of
+ // experimental features.
+ static const int ADDITIONAL_FEATURES_OPTIONS = 2;
const int *const mOptions;
const int mLength;