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

Commit 618a949f authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Use SuggestionResults to get suggestion."

parents ff2456c8 d73edf23
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