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

Commit 46b26d9f authored by Jean Chalard's avatar Jean Chalard Committed by The Android Automerger
Browse files

Fix a bug where bigram search would never return

Bug: 4690487
Change-Id: Ie8f3f651508cc48bbb043a0b308f7e0d1524371c
parent 17e44a72
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -111,7 +111,7 @@ int BigramDictionary::getBigrams(unsigned short *prevWord, int prevWordLength, i
    mMaxBigrams = maxBigrams;

    if (HAS_BIGRAM && IS_LATEST_DICT_VERSION) {
        int pos = mParentDictionary->isValidWord(prevWord, prevWordLength);
        int pos = mParentDictionary->getBigramPosition(prevWord, prevWordLength);
        if (DEBUG_DICT) {
            LOGI("Pos -> %d", pos);
        }
+8 −0
Original line number Diff line number Diff line
@@ -57,4 +57,12 @@ bool Dictionary::isValidWord(unsigned short *word, int length) {
    return mUnigramDictionary->isValidWord(word, length);
}

int Dictionary::getBigramPosition(unsigned short *word, int length) {
    if (IS_LATEST_DICT_VERSION) {
        return mUnigramDictionary->getBigramPosition(DICTIONARY_HEADER_SIZE, word, 0, length);
    } else {
        return mUnigramDictionary->getBigramPosition(0, word, 0, length);
    }
}

} // namespace latinime
+3 −0
Original line number Diff line number Diff line
@@ -62,6 +62,9 @@ public:
            const int pos, unsigned short *c, int *childrenPosition,
            bool *terminal, int *freq);

    // TODO: delete this
    int getBigramPosition(unsigned short *word, int length);

private:
    bool hasBigram();

+5 −4
Original line number Diff line number Diff line
@@ -932,15 +932,16 @@ inline bool UnigramDictionary::processCurrentNodeForExactMatch(const int firstCh
// TODO: use uint32_t instead of unsigned short
bool UnigramDictionary::isValidWord(unsigned short *word, int length) {
    if (IS_LATEST_DICT_VERSION) {
        return (getFrequency(DICTIONARY_HEADER_SIZE, word, 0, length) != NOT_VALID_WORD);
        return (getBigramPosition(DICTIONARY_HEADER_SIZE, word, 0, length) != NOT_VALID_WORD);
    } else {
        return (getFrequency(0, word, 0, length) != NOT_VALID_WORD);
        return (getBigramPosition(0, word, 0, length) != NOT_VALID_WORD);
    }
}


// Require strict exact match.
int UnigramDictionary::getFrequency(int pos, unsigned short *word, int offset, int length) const {
int UnigramDictionary::getBigramPosition(int pos, unsigned short *word, int offset,
        int length) const {
    // returns address of bigram data of that word
    // return -99 if not found

@@ -957,7 +958,7 @@ int UnigramDictionary::getFrequency(int pos, unsigned short *word, int offset, i
                }
            } else {
                if (childPos != 0) {
                    int t = getFrequency(childPos, word, offset + 1, length);
                    int t = getBigramPosition(childPos, word, offset + 1, length);
                    if (t > 0) {
                        return t;
                    }
+1 −1
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ public:
            int fullWordMultiplier, int maxWordLength, int maxWords, int maxProximityChars,
            const bool isLatestDictVersion);
    bool isValidWord(unsigned short *word, int length);
    int getBigramPosition(int pos, unsigned short *word, int offset, int length) const;
    int getSuggestions(const ProximityInfo *proximityInfo, const int *xcoordinates,
            const int *ycoordinates, const int *codes, const int codesSize, const int flags,
            unsigned short *outWords, int *frequencies);
@@ -59,7 +60,6 @@ private:
    void getSuggestionCandidates(const int skipPos, const int excessivePos,
            const int transposedPos, int *nextLetters, const int nextLettersSize,
            const int maxDepth);
    int getFrequency(int pos, unsigned short *word, int offset, int length) const;
    void getVersionNumber();
    bool checkIfDictVersionIsLatest();
    int getAddress(int *pos);