Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88062483 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Pass prevWordCount to native code for getSuggestion.

Bug: 14425059
Change-Id: Id2b49a448982c997e5c0a22445b115e675156c3e
parent cdabc71c
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -186,9 +186,9 @@ public final class BinaryDictionary extends Dictionary {
            long traverseSession, int[] xCoordinates, int[] yCoordinates, int[] times,
            int[] pointerIds, int[] inputCodePoints, int inputSize, int[] suggestOptions,
            int[][] prevWordCodePointArrays, boolean[] isBeginningOfSentenceArray,
            int[] outputSuggestionCount, int[] outputCodePoints, int[] outputScores,
            int[] outputIndices, int[] outputTypes, int[] outputAutoCommitFirstWordConfidence,
            float[] inOutLanguageWeight);
            int prevWordCount, int[] outputSuggestionCount, int[] outputCodePoints,
            int[] outputScores, int[] outputIndices, int[] outputTypes,
            int[] outputAutoCommitFirstWordConfidence, float[] inOutLanguageWeight);
    private static native boolean addUnigramEntryNative(long dict, int[] word, int probability,
            int[] shortcutTarget, int shortcutProbability, boolean isBeginningOfSentence,
            boolean isNotAWord, boolean isBlacklisted, int timestamp);
@@ -295,10 +295,10 @@ public final class BinaryDictionary extends Dictionary {
                inputPointers.getYCoordinates(), inputPointers.getTimes(),
                inputPointers.getPointerIds(), session.mInputCodePoints, inputSize,
                session.mNativeSuggestOptions.getOptions(), session.mPrevWordCodePointArrays,
                session.mIsBeginningOfSentenceArray, session.mOutputSuggestionCount,
                session.mOutputCodePoints, session.mOutputScores, session.mSpaceIndices,
                session.mOutputTypes, session.mOutputAutoCommitFirstWordConfidence,
                session.mInputOutputLanguageWeight);
                session.mIsBeginningOfSentenceArray, prevWordsInfo.getPrevWordCount(),
                session.mOutputSuggestionCount, session.mOutputCodePoints, session.mOutputScores,
                session.mSpaceIndices, session.mOutputTypes,
                session.mOutputAutoCommitFirstWordConfidence, session.mInputOutputLanguageWeight);
        if (inOutLanguageWeight != null) {
            inOutLanguageWeight[0] = session.mInputOutputLanguageWeight[0];
        }
+10 −7
Original line number Diff line number Diff line
@@ -180,8 +180,8 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz,
        jintArray yCoordinatesArray, jintArray timesArray, jintArray pointerIdsArray,
        jintArray inputCodePointsArray, jint inputSize, jintArray suggestOptions,
        jobjectArray prevWordCodePointArrays, jbooleanArray isBeginningOfSentenceArray,
        jintArray outSuggestionCount, jintArray outCodePointsArray, jintArray outScoresArray,
        jintArray outSpaceIndicesArray, jintArray outTypesArray,
        jint prevWordCount, jintArray outSuggestionCount, jintArray outCodePointsArray,
        jintArray outScoresArray, jintArray outSpaceIndicesArray, jintArray outTypesArray,
        jintArray outAutoCommitFirstWordConfidenceArray, jfloatArray inOutLanguageWeight) {
    Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
    // Assign 0 to outSuggestionCount here in case of returning earlier in this method.
@@ -241,7 +241,7 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz,
    env->GetFloatArrayRegion(inOutLanguageWeight, 0, 1 /* len */, &languageWeight);
    SuggestionResults suggestionResults(MAX_RESULTS);
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray);
            prevWordCodePointArrays, isBeginningOfSentenceArray, prevWordCount);
    if (givenSuggestOptions.isGesture() || inputSize > 0) {
        // TODO: Use SuggestionResults to return suggestions.
        dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates,
@@ -285,7 +285,8 @@ static jint latinime_BinaryDictionary_getNgramProbability(JNIEnv *env, jclass cl
    int wordCodePoints[wordLength];
    env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints);
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray);
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    return dictionary->getNgramProbability(&prevWordsInfo,
            CodePointArrayView(wordCodePoints, wordLength));
}
@@ -393,7 +394,8 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j
        return false;
    }
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray);
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    jsize wordLength = env->GetArrayLength(word);
    int wordCodePoints[wordLength];
    env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints);
@@ -413,7 +415,8 @@ static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz
        return false;
    }
    const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env,
            prevWordCodePointArrays, isBeginningOfSentenceArray);
            prevWordCodePointArrays, isBeginningOfSentenceArray,
            env->GetArrayLength(prevWordCodePointArrays));
    jsize codePointCount = env->GetArrayLength(word);
    int wordCodePoints[codePointCount];
    env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints);
@@ -667,7 +670,7 @@ static const JNINativeMethod sMethods[] = {
    },
    {
        const_cast<char *>("getSuggestionsNative"),
        const_cast<char *>("(JJJ[I[I[I[I[II[I[[I[Z[I[I[I[I[I[I[F)V"),
        const_cast<char *>("(JJJ[I[I[I[I[II[I[[I[ZI[I[I[I[I[I[I[F)V"),
        reinterpret_cast<void *>(latinime_BinaryDictionary_getSuggestions)
    },
    {
+3 −7
Original line number Diff line number Diff line
@@ -97,17 +97,13 @@ class JniDataUtils {
    }

    static PrevWordsInfo constructPrevWordsInfo(JNIEnv *env, jobjectArray prevWordCodePointArrays,
            jbooleanArray isBeginningOfSentenceArray) {
            jbooleanArray isBeginningOfSentenceArray, const size_t prevWordCount) {
        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) {
        for (size_t i = 0; i < prevWordCount; ++i) {
            prevWordCodePointCount[i] = 0;
            isBeginningOfSentence[i] = false;
            if (prevWordsCount <= static_cast<int>(i)) {
                continue;
            }
            jintArray prevWord = (jintArray)env->GetObjectArrayElement(prevWordCodePointArrays, i);
            if (!prevWord) {
                continue;
@@ -124,7 +120,7 @@ class JniDataUtils {
            isBeginningOfSentence[i] = isBeginningOfSentenceBoolean == JNI_TRUE;
        }
        return PrevWordsInfo(prevWordCodePoints, prevWordCodePointCount, isBeginningOfSentence,
                MAX_PREV_WORD_COUNT_FOR_N_GRAM);
                prevWordCount);
    }

    static void putBooleanToArray(JNIEnv *env, jbooleanArray array, const int index,