aboutsummaryrefslogtreecommitdiffstats
path: root/native/jni/src/utils/jni_data_utils.h
diff options
context:
space:
mode:
authorKeisuke Kuroyanagi <ksk@google.com>2014-06-26 18:47:25 +0900
committerKeisuke Kuroyanagi <ksk@google.com>2014-06-26 18:47:25 +0900
commit05b1e0d42f9f103516103d4d33e61862c0851e9d (patch)
tree1e73c210e1f5ad7f353a25b9e1629e8562ff0621 /native/jni/src/utils/jni_data_utils.h
parent8681bef03c1ca864d3de0ae27adb5cbfb63f0fef (diff)
downloadlatinime-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.h32
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);