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

Commit 15072b4e authored by Keisuke Kuroynagi's avatar Keisuke Kuroynagi Committed by Android Git Automerger
Browse files

am 80c9b829: Merge "Give PatriciaTrieReadingUtils methods for reading nodes."

* commit '80c9b829':
  Give PatriciaTrieReadingUtils methods for reading nodes.
parents 40f8a487 80c9b829
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -72,7 +72,8 @@ LATIN_IME_CORE_SRC_FILES := \
    suggest/core/session/dic_traverse_session.cpp \
    $(addprefix suggest/policyimpl/dictionary/, \
        dynamic_patricia_trie_policy.cpp \
        patricia_trie_policy.cpp) \
        patricia_trie_policy.cpp \
        patricia_trie_reading_utils.cpp) \
    suggest/policyimpl/gesture/gesture_suggest_policy_factory.cpp \
    $(addprefix suggest/policyimpl/typing/, \
        scoring_params.cpp \
+3 −3
Original line number Diff line number Diff line
@@ -44,15 +44,15 @@ const int TaUtils::WHITELIST_SHORTCUT_PROBABILITY = 15;
    const int origin = *pos;
    switch (MASK_ATTRIBUTE_ADDRESS_TYPE & flags) {
        case FLAG_ATTRIBUTE_ADDRESS_TYPE_ONEBYTE:
            offset = ByteArrayUtils::readUint8andAdvancePosition(
            offset = ByteArrayUtils::readUint8AndAdvancePosition(
                    binaryDictionaryInfo->getDictRoot(), pos);
            break;
        case FLAG_ATTRIBUTE_ADDRESS_TYPE_TWOBYTES:
            offset = ByteArrayUtils::readUint16andAdvancePosition(
            offset = ByteArrayUtils::readUint16AndAdvancePosition(
                    binaryDictionaryInfo->getDictRoot(), pos);
            break;
        case FLAG_ATTRIBUTE_ADDRESS_TYPE_THREEBYTES:
            offset = ByteArrayUtils::readUint24andAdvancePosition(
            offset = ByteArrayUtils::readUint24AndAdvancePosition(
                    binaryDictionaryInfo->getDictRoot(), pos);
            break;
    }
+2 −2
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ class BinaryDictionaryTerminalAttributesReadingUtils {

    static AK_FORCE_INLINE TerminalAttributeFlags getFlagsAndForwardPointer(
            const BinaryDictionaryInfo *const binaryDictionaryInfo, int *const pos) {
        return ByteArrayUtils::readUint8andAdvancePosition(
        return ByteArrayUtils::readUint8AndAdvancePosition(
                binaryDictionaryInfo->getDictRoot(), pos);
    }

@@ -66,7 +66,7 @@ class BinaryDictionaryTerminalAttributesReadingUtils {
    static AK_FORCE_INLINE int getShortcutListSizeAndForwardPointer(
            const BinaryDictionaryInfo *const binaryDictionaryInfo, int *const pos) {
        // readUint16andAdvancePosition() returns an offset *including* the uint16 field itself.
        return ByteArrayUtils::readUint16andAdvancePosition(
        return ByteArrayUtils::readUint16AndAdvancePosition(
                binaryDictionaryInfo->getDictRoot(), pos) - SHORTCUT_LIST_SIZE_FIELD_SIZE;
    }

+8 −8
Original line number Diff line number Diff line
@@ -50,39 +50,39 @@ class ByteArrayUtils {
        return buffer[pos];
    }

    static AK_FORCE_INLINE uint32_t readUint32andAdvancePosition(
    static AK_FORCE_INLINE uint32_t readUint32AndAdvancePosition(
            const uint8_t *const buffer, int *const pos) {
        const uint32_t value = readUint32(buffer, *pos);
        *pos += 4;
        return value;
    }

    static AK_FORCE_INLINE int readSint24andAdvancePosition(
    static AK_FORCE_INLINE int readSint24AndAdvancePosition(
            const uint8_t *const buffer, int *const pos) {
        const uint8_t value = readUint8(buffer, *pos);
        if (value < 0x80) {
            return readUint24andAdvancePosition(buffer, pos);
            return readUint24AndAdvancePosition(buffer, pos);
        } else {
            (*pos)++;
            return -(((value & 0x7F) << 16) ^ readUint16andAdvancePosition(buffer, pos));
            return -(((value & 0x7F) << 16) ^ readUint16AndAdvancePosition(buffer, pos));
        }
    }

    static AK_FORCE_INLINE uint32_t readUint24andAdvancePosition(
    static AK_FORCE_INLINE uint32_t readUint24AndAdvancePosition(
            const uint8_t *const buffer, int *const pos) {
        const uint32_t value = readUint24(buffer, *pos);
        *pos += 3;
        return value;
    }

    static AK_FORCE_INLINE uint16_t readUint16andAdvancePosition(
    static AK_FORCE_INLINE uint16_t readUint16AndAdvancePosition(
            const uint8_t *const buffer, int *const pos) {
        const uint16_t value = readUint16(buffer, *pos);
        *pos += 2;
        return value;
    }

    static AK_FORCE_INLINE uint8_t readUint8andAdvancePosition(
    static AK_FORCE_INLINE uint8_t readUint8AndAdvancePosition(
            const uint8_t *const buffer, int *const pos) {
        return buffer[(*pos)++];
    }
@@ -113,7 +113,7 @@ class ByteArrayUtils {
                *pos += 1;
                return NOT_A_CODE_POINT;
            } else {
                return readUint24andAdvancePosition(buffer, pos);
                return readUint24AndAdvancePosition(buffer, pos);
            }
        } else {
            *pos += 1;
+0 −42
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ class BinaryFormat {
    // Mask and flags for attribute address type selection.
    static const int MASK_ATTRIBUTE_ADDRESS_TYPE = 0x30;

    static bool hasBlacklistedOrNotAWordFlag(const int flags);
    static int getGroupCountAndForwardPointer(const uint8_t *const dict, int *pos);
    static uint8_t getFlagsAndForwardPointer(const uint8_t *const dict, int *pos);
    static int getCodePointAndForwardPointer(const uint8_t *const dict, int *pos);
@@ -74,10 +73,6 @@ class BinaryFormat {
    static int getCodePointsAndProbabilityAndReturnCodePointCount(
            const uint8_t *const root, const int nodePos, const int maxCodePointCount,
            int *const outCodePoints, int *const outUnigramProbability);
    static int getBigramListPositionForWordPosition(const uint8_t *const root,
            const int nodePosition);
    static int getShortcutListPositionForWordPosition(const uint8_t *const root,
            const int nodePosition);

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(BinaryFormat);
@@ -99,10 +94,6 @@ class BinaryFormat {
    static int skipBigrams(const uint8_t *const dict, const uint8_t flags, const int pos);
};

inline bool BinaryFormat::hasBlacklistedOrNotAWordFlag(const int flags) {
    return (flags & (FLAG_IS_BLACKLISTED | FLAG_IS_NOT_A_WORD)) != 0;
}

AK_FORCE_INLINE int BinaryFormat::getGroupCountAndForwardPointer(const uint8_t *const dict,
        int *pos) {
    const int msb = dict[(*pos)++];
@@ -475,38 +466,5 @@ AK_FORCE_INLINE int BinaryFormat::getCodePointsAndProbabilityAndReturnCodePointC
    return 0;
}

AK_FORCE_INLINE int BinaryFormat::getBigramListPositionForWordPosition(
        const uint8_t *const root, const int nodePosition) {
    if (NOT_A_VALID_WORD_POS == nodePosition) return NOT_A_DICT_POS;
    int position = nodePosition;
    const uint8_t flags = getFlagsAndForwardPointer(root, &position);
    if (!(flags & FLAG_HAS_BIGRAMS)) return NOT_A_DICT_POS;
    if (flags & FLAG_HAS_MULTIPLE_CHARS) {
        position = skipOtherCharacters(root, position);
    } else {
        getCodePointAndForwardPointer(root, &position);
    }
    position = skipProbability(flags, position);
    position = skipChildrenPosition(flags, position);
    position = skipShortcuts(root, flags, position);
    return position;
}

AK_FORCE_INLINE int BinaryFormat::getShortcutListPositionForWordPosition(
        const uint8_t *const root, const int nodePosition) {
    if (NOT_A_VALID_WORD_POS == nodePosition) return NOT_A_DICT_POS;
    int position = nodePosition;
    const uint8_t flags = getFlagsAndForwardPointer(root, &position);
    if (!(flags & FLAG_HAS_SHORTCUT_TARGETS)) return NOT_A_DICT_POS;
    if (flags & FLAG_HAS_MULTIPLE_CHARS) {
        position = skipOtherCharacters(root, position);
    } else {
        getCodePointAndForwardPointer(root, &position);
    }
    position = skipProbability(flags, position);
    position = skipChildrenPosition(flags, position);
    return position;
}

} // namespace latinime
#endif // LATINIME_BINARY_FORMAT_H
Loading