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

Commit 351864b3 authored by Jean Chalard's avatar Jean Chalard
Browse files

Fetch and pass the bigram position on suggestions.

This is a cherry-pick of change I2d81742f

Bug: 6313806
Change-Id: Ic1190b7980d032bc11b57841bca040d980889b6b
parent 49caddbd
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -137,13 +137,15 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jobject object,
    int *frequencies = env->GetIntArrayElements(frequencyArray, 0);
    int *inputCodes = env->GetIntArrayElements(inputArray, 0);
    jchar *outputChars = env->GetCharArrayElements(outputArray, 0);
    // Deactivated to prevent unused variable errors.
    // TODO: use the following variables.
    // jint *prevWordChars = prevWordForBigrams
    //         ? env->GetIntArrayElements(prevWordForBigrams, 0) : NULL;
    // jsize prevWordLength = prevWordChars ? env->GetArrayLength(prevWordForBigrams) : 0;
    jint *prevWordChars = prevWordForBigrams
            ? env->GetIntArrayElements(prevWordForBigrams, 0) : 0;
    jsize prevWordLength = prevWordChars ? env->GetArrayLength(prevWordForBigrams) : 0;
    int count = dictionary->getSuggestions(pInfo, xCoordinates, yCoordinates, inputCodes,
            arraySize, useFullEditDistance, (unsigned short*) outputChars, frequencies);
            arraySize, prevWordChars, prevWordLength, useFullEditDistance,
            (unsigned short*) outputChars, frequencies);
    if (prevWordChars) {
        env->ReleaseIntArrayElements(prevWordForBigrams, prevWordChars, JNI_ABORT);
    }
    env->ReleaseCharArrayElements(outputArray, outputChars, 0);
    env->ReleaseIntArrayElements(inputArray, inputCodes, JNI_ABORT);
    env->ReleaseIntArrayElements(frequencyArray, frequencies, 0);
+5 −4
Original line number Diff line number Diff line
@@ -107,8 +107,8 @@ int BigramDictionary::getBigrams(const int32_t *prevWord, int prevWordLength, in
    mMaxBigrams = maxBigrams;

    const uint8_t* const root = DICT;
    int pos = getBigramListForWord(root, prevWord, prevWordLength);
    // getBigramListForWord returns 0 if this word is not in the dictionary or has no bigrams
    int pos = getBigramListPositionForWord(prevWord, prevWordLength);
    // getBigramListPositionForWord returns 0 if this word isn't in the dictionary or has no bigrams
    if (0 == pos) return 0;
    int bigramFlags;
    int bigramCount = 0;
@@ -133,8 +133,9 @@ int BigramDictionary::getBigrams(const int32_t *prevWord, int prevWordLength, in

// Returns a pointer to the start of the bigram list.
// If the word is not found or has no bigrams, this function returns 0.
int BigramDictionary::getBigramListForWord(const uint8_t* const root,
        const int32_t *prevWord, const int prevWordLength) {
int BigramDictionary::getBigramListPositionForWord(const int32_t *prevWord,
        const int prevWordLength) {
    const uint8_t* const root = DICT;
    int pos = BinaryFormat::getTerminalPosition(root, prevWord, prevWordLength);

    if (NOT_VALID_WORD == pos) return 0;
+1 −2
Original line number Diff line number Diff line
@@ -27,8 +27,7 @@ class BigramDictionary {
    BigramDictionary(const unsigned char *dict, int maxWordLength, Dictionary *parentDictionary);
    int getBigrams(const int32_t *word, int length, int *codes, int codesSize,
            unsigned short *outWords, int *frequencies, int maxWordLength, int maxBigrams);
    int getBigramListForWord(const uint8_t* const root,
        const int32_t *prevWord, const int prevWordLength);
    int getBigramListPositionForWord(const int32_t *prevWord, const int prevWordLength);
    ~BigramDictionary();
 private:
    bool addWordBigram(unsigned short *word, int length, int frequency);
+4 −4
Original line number Diff line number Diff line
@@ -33,12 +33,12 @@ class Dictionary {
            int fullWordMultiplier, int maxWordLength, int maxWords);

    int getSuggestions(ProximityInfo *proximityInfo, int *xcoordinates, int *ycoordinates,
            int *codes, int codesSize, bool useFullEditDistance, unsigned short *outWords,
            int *frequencies) {
            int *codes, int codesSize, const int32_t* prevWordChars, const int prevWordLength,
            bool useFullEditDistance, unsigned short *outWords, int *frequencies) {
        // bigramListPosition is, as an int, the offset of the bigram list in the file.
        // If none, it's zero.
        // TODO: get this from the bigram dictionary instance
        const int bigramListPosition = 0;
        const int bigramListPosition = !prevWordChars ? 0
                : mBigramDictionary->getBigramListPositionForWord(prevWordChars, prevWordLength);
        return mUnigramDictionary->getSuggestions(proximityInfo, mWordsPriorityQueuePool,
                mCorrection, xcoordinates, ycoordinates, codes, codesSize, bigramListPosition,
                useFullEditDistance, outWords, frequencies);