aboutsummaryrefslogtreecommitdiffstats
path: root/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2014-02-03 14:51:58 +0900
committerKeisuke Kuroyanagi <ksk@google.com>2014-02-03 14:51:58 +0900
commit38f341a2a53a04ce4195a0cb99fcb6e71203dec0 (patch)
tree59b9f1759e406da972b0265c6cbeb9924c02756f /native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
parent9221772ab7f112f6ef9136a69d0502befbdc544e (diff)
downloadlatinime-38f341a2a53a04ce4195a0cb99fcb6e71203dec0.tar.gz
latinime-38f341a2a53a04ce4195a0cb99fcb6e71203dec0.tar.xz
latinime-38f341a2a53a04ce4195a0cb99fcb6e71203dec0.zip
Add a jni method to iterate words in a dictionary.
Bug: 12810574 Change-Id: I87b13559765f0262dfd06c2ba40d43af6437ea7f
Diffstat (limited to 'native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp')
-rw-r--r--native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
index 8f3f8e21e..c919ebd91 100644
--- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
+++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp
@@ -260,6 +260,26 @@ static jint latinime_BinaryDictionary_getBigramProbability(JNIEnv *env, jclass c
word1Length);
}
+// Method to iterate all words in the dictionary for makedict.
+// If token is 0, this method newly starts iterating the dictionary. This method returns 0 when
+// the dictionary does not have a next word.
+static jint latinime_BinaryDictionary_getNextWord(JNIEnv *env, jclass clazz,
+ jlong dict, jint token, jintArray outCodePoints) {
+ Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
+ if (!dictionary) return 0;
+ const jsize outCodePointsLength = env->GetArrayLength(outCodePoints);
+ if (outCodePointsLength != MAX_WORD_LENGTH) {
+ AKLOGE("Invalid outCodePointsLength: %d", outCodePointsLength);
+ ASSERT(false);
+ return 0;
+ }
+ int wordCodePoints[outCodePointsLength];
+ memset(wordCodePoints, 0, sizeof(wordCodePoints));
+ const int nextToken = dictionary->getNextWordAndNextToken(token, wordCodePoints);
+ env->SetIntArrayRegion(outCodePoints, 0, outCodePointsLength, wordCodePoints);
+ return nextToken;
+}
+
static void latinime_BinaryDictionary_getWordProperty(JNIEnv *env, jclass clazz,
jlong dict, jintArray word, jintArray outCodePoints, jbooleanArray outFlags,
jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilityInfo,
@@ -527,6 +547,11 @@ static const JNINativeMethod sMethods[] = {
reinterpret_cast<void *>(latinime_BinaryDictionary_getWordProperty)
},
{
+ const_cast<char *>("getNextWordNative"),
+ const_cast<char *>("(JI[I)I"),
+ reinterpret_cast<void *>(latinime_BinaryDictionary_getNextWord)
+ },
+ {
const_cast<char *>("calcNormalizedScoreNative"),
const_cast<char *>("([I[II)F"),
reinterpret_cast<void *>(latinime_BinaryDictionary_calcNormalizedScore)