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

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

Use SuggestionResults to get suggestion.

Bug: 8187060
Bug: 13333066
Change-Id: I435096ecf8422453f9b167adb0ca3b9c8a840018
parent 2426bc29
Loading
Loading
Loading
Loading
+13 −30
Original line number Diff line number Diff line
@@ -199,47 +199,30 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz,
        ASSERT(false);
        return;
    }
    int outputCodePoints[outputCodePointsLength];
    int scores[scoresLength];
    const jsize spaceIndicesLength = env->GetArrayLength(outSpaceIndicesArray);
    int spaceIndices[spaceIndicesLength];
    const jsize outputTypesLength = env->GetArrayLength(outTypesArray);
    int outputTypes[outputTypesLength];
    const jsize outputAutoCommitFirstWordConfidenceLength =
            env->GetArrayLength(outAutoCommitFirstWordConfidenceArray);
    // We only use the first result, as obviously we will only ever autocommit the first one
    ASSERT(outputAutoCommitFirstWordConfidenceLength == 1);
    int outputAutoCommitFirstWordConfidence[outputAutoCommitFirstWordConfidenceLength];
    memset(outputCodePoints, 0, sizeof(outputCodePoints));
    memset(scores, 0, sizeof(scores));
    memset(spaceIndices, 0, sizeof(spaceIndices));
    memset(outputTypes, 0, sizeof(outputTypes));
    memset(outputAutoCommitFirstWordConfidence, 0, sizeof(outputAutoCommitFirstWordConfidence));
    if (outputAutoCommitFirstWordConfidenceLength != 1) {
        // We only use the first result, as obviously we will only ever autocommit the first one
        AKLOGE("Invalid outputAutoCommitFirstWordConfidenceLength: %d",
                outputAutoCommitFirstWordConfidenceLength);
        ASSERT(false);
        return;
    }

    SuggestionResults suggestionResults(MAX_RESULTS);
    if (givenSuggestOptions.isGesture() || inputSize > 0) {
        // TODO: Use SuggestionResults to return suggestions.
        count = dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates,
        dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates,
                times, pointerIds, inputCodePoints, inputSize, prevWordCodePoints,
                prevWordCodePointsLength, &givenSuggestOptions, outputCodePoints,
                scores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence);
                prevWordCodePointsLength, &givenSuggestOptions, &suggestionResults);
    } else {
        SuggestionResults suggestionResults(MAX_RESULTS);
        dictionary->getPredictions(prevWordCodePoints, prevWordCodePointsLength,
                &suggestionResults);
    }
    suggestionResults.outputSuggestions(env, outSuggestionCount, outCodePointsArray,
            outScoresArray, outSpaceIndicesArray, outTypesArray,
            outAutoCommitFirstWordConfidenceArray);
        return;
    }

    // Copy back the output values
    env->SetIntArrayRegion(outSuggestionCount, 0, 1 /* len */, &count);
    env->SetIntArrayRegion(outCodePointsArray, 0, outputCodePointsLength, outputCodePoints);
    env->SetIntArrayRegion(outScoresArray, 0, scoresLength, scores);
    env->SetIntArrayRegion(outSpaceIndicesArray, 0, spaceIndicesLength, spaceIndices);
    env->SetIntArrayRegion(outTypesArray, 0, outputTypesLength, outputTypes);
    env->SetIntArrayRegion(outAutoCommitFirstWordConfidenceArray, 0,
            outputAutoCommitFirstWordConfidenceLength, outputAutoCommitFirstWordConfidence);
}

static jint latinime_BinaryDictionary_getProbability(JNIEnv *env, jclass clazz, jlong dict,
+3 −2
Original line number Diff line number Diff line
@@ -103,7 +103,8 @@ AK_FORCE_INLINE static int intArrayToCharArray(const int *const source, const in
#define AKLOGI(fmt, ...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, fmt, ##__VA_ARGS__)
#endif // defined(HOST_TOOL)

#define DUMP_RESULT(words, frequencies) do { dumpResult(words, frequencies); } while (0)
#define DUMP_SUGGESTION(words, frequencies, index, score) \
        do { dumpWordInfo(words, frequencies, index, score); } while (0)
#define DUMP_WORD(word, length) do { dumpWord(word, length); } while (0)
#define INTS_TO_CHARS(input, length, output, outlength) do { \
        intArrayToCharArray(input, length, output, outlength); } while (0)
@@ -165,7 +166,7 @@ static inline void showStackTrace() {
#else // defined(FLAG_DO_PROFILE) || defined(FLAG_DBG)
#define AKLOGE(fmt, ...)
#define AKLOGI(fmt, ...)
#define DUMP_RESULT(words, frequencies)
#define DUMP_SUGGESTION(words, frequencies, index, score)
#define DUMP_WORD(word, length)
#undef DO_ASSERT_TEST
#define ASSERT(success)
+14 −22
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@

#include "defines.h"
#include "suggest/core/policy/dictionary_header_structure_policy.h"
#include "suggest/core/result/suggestion_results.h"
#include "suggest/core/session/dic_traverse_session.h"
#include "suggest/core/suggest.h"
#include "suggest/core/suggest_options.h"
@@ -43,34 +44,25 @@ Dictionary::Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::Structu
    logDictionaryInfo(env);
}

int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
        int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
        int inputSize, int *prevWordCodePoints, int prevWordLength,
        const SuggestOptions *const suggestOptions, int *outWords, int *outputScores,
        int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const {
        const SuggestOptions *const suggestOptions,
        SuggestionResults *const outSuggestionResults) const {
    TimeKeeper::setCurrentTime();
    int result = 0;
    if (suggestOptions->isGesture()) {
    DicTraverseSession::initSessionInstance(
            traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
        result = mGestureSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
                ycoordinates, times, pointerIds, inputCodePoints, inputSize, outWords,
                outputScores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence);
        if (DEBUG_DICT) {
            DUMP_RESULT(outWords, outputScores);
        }
        return result;
    if (suggestOptions->isGesture()) {
        mGestureSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
                ycoordinates, times, pointerIds, inputCodePoints, inputSize,
                outSuggestionResults);
    } else {
        DicTraverseSession::initSessionInstance(
                traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
        result = mTypingSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
        mTypingSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
                ycoordinates, times, pointerIds, inputCodePoints, inputSize,
                outWords, outputScores, spaceIndices, outputTypes,
                outputAutoCommitFirstWordConfidence);
        if (DEBUG_DICT) {
            DUMP_RESULT(outWords, outputScores);
                outSuggestionResults);
    }
        return result;
    if (DEBUG_DICT) {
        outSuggestionResults->dumpSuggestions();
    }
}

+3 −3
Original line number Diff line number Diff line
@@ -62,11 +62,11 @@ class Dictionary {
    Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::StructurePolicyPtr
            dictionaryStructureWithBufferPolicy);

    int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
    void getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
            int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
            int inputSize, int *prevWordCodePoints, int prevWordLength,
            const SuggestOptions *const suggestOptions, int *outWords, int *outputScores,
            int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const;
            const SuggestOptions *const suggestOptions,
            SuggestionResults *const outSuggestionResults) const;

    void getPredictions(const int *word, int length,
            SuggestionResults *const outSuggestionResults) const;
+3 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ namespace latinime {

class DicNode;
class DicTraverseSession;
class SuggestionResults;

// This class basically tweaks suggestions and distances apart from CompoundDistance
class Scoring {
@@ -30,11 +31,8 @@ class Scoring {
    virtual int calculateFinalScore(const float compoundDistance, const int inputSize,
            const ErrorTypeUtils::ErrorType containedErrorTypes, const bool forceCommit,
            const bool boostExactMatches) const = 0;
    virtual bool getMostProbableString(const DicTraverseSession *const traverseSession,
            const int terminalSize, const float languageWeight, int *const outputCodePoints,
            int *const type, int *const freq) const = 0;
    virtual void safetyNetForMostProbableString(const int scoreCount,
            const int maxScore, int *const outputCodePoints, int *const scores) const = 0;
    virtual void getMostProbableString(const DicTraverseSession *const traverseSession,
            const float languageWeight, SuggestionResults *const outSuggestionResults) const = 0;
    virtual float getAdjustedLanguageWeight(DicTraverseSession *const traverseSession,
            DicNode *const terminals, const int size) const = 0;
    virtual float getDoubleLetterDemotionDistanceCost(
Loading