aboutsummaryrefslogtreecommitdiffstats
path: root/dictionary
diff options
context:
space:
mode:
Diffstat (limited to 'dictionary')
-rw-r--r--dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp10
-rw-r--r--dictionary/src/dictionary.cpp11
-rw-r--r--dictionary/src/dictionary.h1
3 files changed, 16 insertions, 6 deletions
diff --git a/dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index c9e158c4c..3076085e4 100644
--- a/dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/dictionary/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -38,6 +38,7 @@ using namespace android;
static jfieldID sDescriptorField;
static jfieldID sAssetManagerNativeField;
static jmethodID sAddWordMethod;
+static jfieldID sDictLength;
//
// helper function to throw an exception
@@ -79,6 +80,7 @@ static jint latinime_BinaryDictionary_open
}
Dictionary *dictionary = new Dictionary(dict, typedLetterMultiplier, fullWordMultiplier);
dictionary->setAsset(dictAsset);
+ env->SetIntField(object, sDictLength, (jint) dictAsset->getLength());
env->ReleaseStringUTFChars(resourceString, resourcePath);
return (jint) dictionary;
@@ -176,6 +178,14 @@ static int registerNatives(JNIEnv *env)
}
sAssetManagerNativeField = env->GetFieldID(clazz, "mObject", "I");
+ // Get the field pointer for the dictionary length
+ clazz = env->FindClass(kClassPathName);
+ if (clazz == NULL) {
+ LOGE("Can't find %s", kClassPathName);
+ return -1;
+ }
+ sDictLength = env->GetFieldID(clazz, "mDictLength", "I");
+
return registerNativeMethods(env,
kClassPathName, gMethods, sizeof(gMethods) / sizeof(gMethods[0]));
}
diff --git a/dictionary/src/dictionary.cpp b/dictionary/src/dictionary.cpp
index cc711f419..306aff527 100644
--- a/dictionary/src/dictionary.cpp
+++ b/dictionary/src/dictionary.cpp
@@ -51,6 +51,7 @@ Dictionary::~Dictionary()
int Dictionary::getSuggestions(int *codes, int codesSize, unsigned short *outWords, int *frequencies,
int maxWordLength, int maxWords, int maxAlternatives, int skipPos)
{
+ int suggWords;
mFrequencies = frequencies;
mOutputChars = outWords;
mInputCodes = codes;
@@ -58,14 +59,16 @@ int Dictionary::getSuggestions(int *codes, int codesSize, unsigned short *outWor
mMaxAlternatives = maxAlternatives;
mMaxWordLength = maxWordLength;
mMaxWords = maxWords;
- mWords = 0;
mSkipPos = skipPos;
mMaxEditDistance = mInputLength < 5 ? 2 : mInputLength / 2;
getWordsRec(0, 0, mInputLength * 3, false, 1, 0, 0);
- if (DEBUG_DICT) LOGI("Returning %d words", mWords);
- return mWords;
+ // Get the word count
+ suggWords = 0;
+ while (suggWords < mMaxWords && mFrequencies[suggWords] > 0) suggWords++;
+ if (DEBUG_DICT) LOGI("Returning %d words", suggWords);
+ return suggWords;
}
unsigned short
@@ -138,8 +141,6 @@ Dictionary::addWord(unsigned short *word, int length, int frequency)
*dest++ = *word++;
}
*dest = 0; // NULL terminate
- // Update the word count
- if (insertAt + 1 > mWords) mWords = insertAt + 1;
if (DEBUG_DICT) LOGI("Added word at %d\n", insertAt);
return true;
}
diff --git a/dictionary/src/dictionary.h b/dictionary/src/dictionary.h
index 8f195ca9a..a12c035c8 100644
--- a/dictionary/src/dictionary.h
+++ b/dictionary/src/dictionary.h
@@ -60,7 +60,6 @@ private:
int *mFrequencies;
int mMaxWords;
int mMaxWordLength;
- int mWords;
unsigned short *mOutputChars;
int *mInputCodes;
int mInputLength;