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

Commit 847a026c authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Make dictionary structure policy return shortcut iterator.

Bug: 14425059

Change-Id: I0da22c41f818673430c285103af340397aaba9fb
parent 97200342
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -31,6 +31,11 @@ class BinaryDictionaryShortcutIterator {
              mPos(shortcutStructurePolicy->getStartPos(shortcutPos)),
              mHasNextShortcutTarget(shortcutPos != NOT_A_DICT_POS) {}

    BinaryDictionaryShortcutIterator(const BinaryDictionaryShortcutIterator &&shortcutIterator)
            : mShortcutStructurePolicy(shortcutIterator.mShortcutStructurePolicy),
              mPos(shortcutIterator.mPos),
              mHasNextShortcutTarget(shortcutIterator.mHasNextShortcutTarget) {}

    AK_FORCE_INLINE bool hasNextShortcutTarget() const {
        return mHasNextShortcutTarget;
    }
@@ -45,7 +50,8 @@ class BinaryDictionaryShortcutIterator {
    }

 private:
    DISALLOW_IMPLICIT_CONSTRUCTORS(BinaryDictionaryShortcutIterator);
    DISALLOW_DEFAULT_CONSTRUCTOR(BinaryDictionaryShortcutIterator);
    DISALLOW_ASSIGNMENT_OPERATOR(BinaryDictionaryShortcutIterator);

    const DictionaryShortcutsStructurePolicy *const mShortcutStructurePolicy;
    int mPos;
+2 −4
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <memory>

#include "defines.h"
#include "suggest/core/dictionary/binary_dictionary_shortcut_iterator.h"
#include "suggest/core/dictionary/property/word_property.h"
#include "utils/int_array_view.h"

@@ -28,7 +29,6 @@ namespace latinime {
class DicNode;
class DicNodeVector;
class DictionaryHeaderStructurePolicy;
class DictionaryShortcutsStructurePolicy;
class NgramListener;
class PrevWordsInfo;
class UnigramProperty;
@@ -63,12 +63,10 @@ class DictionaryStructureWithBufferPolicy {
    virtual void iterateNgramEntries(const int *const prevWordIds,
            NgramListener *const listener) const = 0;

    virtual int getShortcutPositionOfPtNode(const int ptNodePos) const = 0;
    virtual BinaryDictionaryShortcutIterator getShortcutIterator(const int ptNodePos) const = 0;

    virtual const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const = 0;

    virtual const DictionaryShortcutsStructurePolicy *getShortcutsStructurePolicy() const = 0;

    // Returns whether the update was success or not.
    virtual bool addUnigramEntry(const CodePointArrayView wordCodePoints,
            const UnigramProperty *const unigramProperty) = 0;
+3 −4
Original line number Diff line number Diff line
@@ -139,10 +139,9 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
    // Shortcut is not supported for multiple words suggestions.
    // TODO: Check shortcuts during traversal for multiple words suggestions.
    if (!terminalDicNode->hasMultipleWords()) {
        BinaryDictionaryShortcutIterator shortcutIt(
                traverseSession->getDictionaryStructurePolicy()->getShortcutsStructurePolicy(),
                traverseSession->getDictionaryStructurePolicy()
                        ->getShortcutPositionOfPtNode(terminalDicNode->getPtNodePos()));
        BinaryDictionaryShortcutIterator shortcutIt =
                traverseSession->getDictionaryStructurePolicy()->getShortcutIterator(
                        terminalDicNode->getPtNodePos());
        const bool sameAsTyped = scoringPolicy->sameAsTyped(traverseSession, terminalDicNode);
        outputShortcuts(&shortcutIt, finalScore, sameAsTyped, outSuggestionResults);
    }
+6 −0
Original line number Diff line number Diff line
@@ -174,6 +174,12 @@ void Ver4PatriciaTriePolicy::iterateNgramEntries(const int *const prevWordIds,
    }
}

BinaryDictionaryShortcutIterator Ver4PatriciaTriePolicy::getShortcutIterator(
        const int ptNodePos) const {
    const int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
    return BinaryDictionaryShortcutIterator(&mShortcutPolicy, shortcutPos);
}

int Ver4PatriciaTriePolicy::getShortcutPositionOfPtNode(const int ptNodePos) const {
    if (ptNodePos == NOT_A_DICT_POS) {
        return NOT_A_DICT_POS;
+3 −5
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@

#include "defines.h"
#include "suggest/core/dictionary/binary_dictionary_bigrams_iterator.h"
#include "suggest/core/dictionary/binary_dictionary_shortcut_iterator.h"
#include "suggest/core/policy/dictionary_structure_with_buffer_policy.h"
#include "suggest/policyimpl/dictionary/header/header_policy.h"
#include "suggest/policyimpl/dictionary/structure/pt_common/dynamic_pt_updating_helper.h"
@@ -96,16 +97,12 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {

    void iterateNgramEntries(const int *const prevWordIds, NgramListener *const listener) const;

    int getShortcutPositionOfPtNode(const int ptNodePos) const;
    BinaryDictionaryShortcutIterator getShortcutIterator(const int ptNodePos) const;

    const DictionaryHeaderStructurePolicy *getHeaderStructurePolicy() const {
        return mHeaderPolicy;
    }

    const DictionaryShortcutsStructurePolicy *getShortcutsStructurePolicy() const {
        return &mShortcutPolicy;
    }

    bool addUnigramEntry(const CodePointArrayView wordCodePoints,
            const UnigramProperty *const unigramProperty);

@@ -163,6 +160,7 @@ class Ver4PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
    mutable bool mIsCorrupted;

    int getBigramsPositionOfPtNode(const int ptNodePos) const;
    int getShortcutPositionOfPtNode(const int ptNodePos) const;
    int getWordIdFromTerminalPtNodePos(const int ptNodePos) const;
    int getTerminalPtNodePosFromWordId(const int wordId) const;
};
Loading