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

Commit 647c0007 authored by Keisuke Kuroynagi's avatar Keisuke Kuroynagi
Browse files

Give PatriciaTrieReadingUtils methods for reading nodes.

The remaining methods in BinaryFormat will be removed.

Bug: 6669677
Change-Id: I866f828d69a600c0ac03b68d71b1f6ee2ce4dd36
parent f0a7f70c
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