diff options
author | 2014-06-26 18:47:25 +0900 | |
---|---|---|
committer | 2014-06-26 18:47:25 +0900 | |
commit | 05b1e0d42f9f103516103d4d33e61862c0851e9d (patch) | |
tree | 1e73c210e1f5ad7f353a25b9e1629e8562ff0621 /native/jni/src/utils/jni_data_utils.h | |
parent | 8681bef03c1ca864d3de0ae27adb5cbfb63f0fef (diff) | |
download | latinime-05b1e0d42f9f103516103d4d33e61862c0851e9d.tar.gz latinime-05b1e0d42f9f103516103d4d33e61862c0851e9d.tar.xz latinime-05b1e0d42f9f103516103d4d33e61862c0851e9d.zip |
Extend jni method to use multiple previous words.
Bug: 14425059
Change-Id: I8150e8812ee32f8c713315a234b52e5b3a79d7a0
Diffstat (limited to 'native/jni/src/utils/jni_data_utils.h')
-rw-r--r-- | native/jni/src/utils/jni_data_utils.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/native/jni/src/utils/jni_data_utils.h b/native/jni/src/utils/jni_data_utils.h index 3514aeeb0..cb82d3c3b 100644 --- a/native/jni/src/utils/jni_data_utils.h +++ b/native/jni/src/utils/jni_data_utils.h @@ -21,6 +21,7 @@ #include "defines.h" #include "jni.h" +#include "suggest/core/session/prev_words_info.h" #include "suggest/core/policy/dictionary_header_structure_policy.h" #include "suggest/policyimpl/dictionary/header/header_read_write_utils.h" #include "utils/char_utils.h" @@ -95,6 +96,37 @@ class JniDataUtils { } } + static PrevWordsInfo constructPrevWordsInfo(JNIEnv *env, jobjectArray prevWordCodePointArrays, + jbooleanArray isBeginningOfSentenceArray) { + int prevWordCodePoints[MAX_PREV_WORD_COUNT_FOR_N_GRAM][MAX_WORD_LENGTH]; + int prevWordCodePointCount[MAX_PREV_WORD_COUNT_FOR_N_GRAM]; + bool isBeginningOfSentence[MAX_PREV_WORD_COUNT_FOR_N_GRAM]; + jsize prevWordsCount = env->GetArrayLength(prevWordCodePointArrays); + for (size_t i = 0; i < NELEMS(prevWordCodePoints); ++i) { + prevWordCodePointCount[i] = 0; + isBeginningOfSentence[i] = false; + if (prevWordsCount <= static_cast<int>(i)) { + continue; + } + jintArray prevWord = (jintArray)env->GetObjectArrayElement(prevWordCodePointArrays, i); + if (!prevWord) { + continue; + } + jsize prevWordLength = env->GetArrayLength(prevWord); + if (prevWordLength > MAX_WORD_LENGTH) { + continue; + } + env->GetIntArrayRegion(prevWord, 0, prevWordLength, prevWordCodePoints[i]); + prevWordCodePointCount[i] = prevWordLength; + jboolean isBeginningOfSentenceBoolean = JNI_FALSE; + env->GetBooleanArrayRegion(isBeginningOfSentenceArray, i, 1 /* len */, + &isBeginningOfSentenceBoolean); + isBeginningOfSentence[i] = isBeginningOfSentenceBoolean == JNI_TRUE; + } + return PrevWordsInfo(prevWordCodePoints, prevWordCodePointCount, isBeginningOfSentence, + MAX_PREV_WORD_COUNT_FOR_N_GRAM); + } + static void putBooleanToArray(JNIEnv *env, jbooleanArray array, const int index, const jboolean value) { env->SetBooleanArrayRegion(array, index, 1 /* len */, &value); |