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

Commit 1605630c authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Use WordIdArrayView for prevWordIds."

parents 97b46504 537f6eea
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ class DicNode {
    }

    // Init for root with prevWordIds which is used for n-gram
    void initAsRoot(const int rootPtNodeArrayPos, const int *const prevWordIds) {
    void initAsRoot(const int rootPtNodeArrayPos, const WordIdArrayView prevWordIds) {
        mIsCachedForNextSuggestion = false;
        mDicNodeProperties.init(rootPtNodeArrayPos, prevWordIds);
        mDicNodeState.init();
@@ -115,12 +115,11 @@ class DicNode {
    // Init for root with previous word
    void initAsRootWithPreviousWord(const DicNode *const dicNode, const int rootPtNodeArrayPos) {
        mIsCachedForNextSuggestion = dicNode->mIsCachedForNextSuggestion;
        int newPrevWordIds[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
        WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> newPrevWordIds;
        newPrevWordIds[0] = dicNode->mDicNodeProperties.getWordId();
        for (size_t i = 1; i < NELEMS(newPrevWordIds); ++i) {
            newPrevWordIds[i] = dicNode->getPrevWordIds()[i - 1];
        }
        mDicNodeProperties.init(rootPtNodeArrayPos, newPrevWordIds);
        dicNode->getPrevWordIds().limit(newPrevWordIds.size() - 1)
                .copyToArray(&newPrevWordIds, 1 /* offset */);
        mDicNodeProperties.init(rootPtNodeArrayPos, WordIdArrayView::fromArray(newPrevWordIds));
        mDicNodeState.initAsRootWithPreviousWord(&dicNode->mDicNodeState,
                dicNode->mDicNodeProperties.getDepth());
        PROF_NODE_COPY(&dicNode->mProfiler, mProfiler);
@@ -203,8 +202,7 @@ class DicNode {
        return mDicNodeProperties.getWordId();
    }

    // TODO: Use view class to return word id array.
    const int *getPrevWordIds() const {
    const WordIdArrayView getPrevWordIds() const {
        return mDicNodeProperties.getPrevWordIds();
    }

+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ namespace latinime {

/* static */ void DicNodeUtils::initAsRoot(
        const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy,
        const int *const prevWordIds, DicNode *const newRootDicNode) {
        const WordIdArrayView prevWordIds, DicNode *const newRootDicNode) {
    newRootDicNode->initAsRoot(dictionaryStructurePolicy->getRootPosition(), prevWordIds);
}

+2 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define LATINIME_DIC_NODE_UTILS_H

#include "defines.h"
#include "utils/int_array_view.h"

namespace latinime {

@@ -30,7 +31,7 @@ class DicNodeUtils {
 public:
    static void initAsRoot(
            const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy,
            const int *const prevWordIds, DicNode *const newRootDicNode);
            const WordIdArrayView prevWordIds, DicNode *const newRootDicNode);
    static void initAsRootWithPreviousWord(
            const DictionaryStructureWithBufferPolicy *const dictionaryStructurePolicy,
            const DicNode *const prevWordLastDicNode, DicNode *const newRootDicNode);
+13 −9
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@
#define LATINIME_DIC_NODE_PROPERTIES_H

#include <cstdint>
#include <cstdlib>

#include "defines.h"
#include "utils/int_array_view.h"

namespace latinime {

@@ -36,23 +38,23 @@ class DicNodeProperties {

    // Should be called only once per DicNode is initialized.
    void init(const int childrenPos, const int nodeCodePoint, const int wordId,
            const uint16_t depth, const uint16_t leavingDepth, const int *const prevWordIds) {
            const uint16_t depth, const uint16_t leavingDepth, const WordIdArrayView prevWordIds) {
        mChildrenPtNodeArrayPos = childrenPos;
        mDicNodeCodePoint = nodeCodePoint;
        mWordId = wordId;
        mDepth = depth;
        mLeavingDepth = leavingDepth;
        memmove(mPrevWordIds, prevWordIds, sizeof(mPrevWordIds));
        prevWordIds.copyToArray(&mPrevWordIds, 0 /* offset */);
    }

    // Init for root with prevWordsPtNodePos which is used for n-gram
    void init(const int rootPtNodeArrayPos, const int *const prevWordIds) {
    void init(const int rootPtNodeArrayPos, const WordIdArrayView prevWordIds) {
        mChildrenPtNodeArrayPos = rootPtNodeArrayPos;
        mDicNodeCodePoint = NOT_A_CODE_POINT;
        mWordId = NOT_A_WORD_ID;
        mDepth = 0;
        mLeavingDepth = 0;
        memmove(mPrevWordIds, prevWordIds, sizeof(mPrevWordIds));
        prevWordIds.copyToArray(&mPrevWordIds, 0 /* offset */);
    }

    void initByCopy(const DicNodeProperties *const dicNodeProp) {
@@ -61,7 +63,8 @@ class DicNodeProperties {
        mWordId = dicNodeProp->mWordId;
        mDepth = dicNodeProp->mDepth;
        mLeavingDepth = dicNodeProp->mLeavingDepth;
        memmove(mPrevWordIds, dicNodeProp->mPrevWordIds, sizeof(mPrevWordIds));
        WordIdArrayView::fromArray(dicNodeProp->mPrevWordIds)
                .copyToArray(&mPrevWordIds, 0 /* offset */);
    }

    // Init as passing child
@@ -71,7 +74,8 @@ class DicNodeProperties {
        mWordId = dicNodeProp->mWordId;
        mDepth = dicNodeProp->mDepth + 1; // Increment the depth of a passing child
        mLeavingDepth = dicNodeProp->mLeavingDepth;
        memmove(mPrevWordIds, dicNodeProp->mPrevWordIds, sizeof(mPrevWordIds));
        WordIdArrayView::fromArray(dicNodeProp->mPrevWordIds)
                .copyToArray(&mPrevWordIds, 0 /* offset */);
    }

    int getChildrenPtNodeArrayPos() const {
@@ -99,8 +103,8 @@ class DicNodeProperties {
        return (mChildrenPtNodeArrayPos != NOT_A_DICT_POS) || mDepth != mLeavingDepth;
    }

    const int *getPrevWordIds() const {
        return mPrevWordIds;
    const WordIdArrayView getPrevWordIds() const {
        return WordIdArrayView::fromArray(mPrevWordIds);
    }

    int getWordId() const {
@@ -116,7 +120,7 @@ class DicNodeProperties {
    int mWordId;
    uint16_t mDepth;
    uint16_t mLeavingDepth;
    int mPrevWordIds[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
    WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> mPrevWordIds;
};
} // namespace latinime
#endif // LATINIME_DIC_NODE_PROPERTIES_H
+11 −11
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi
        return;
    }
    const WordAttributes wordAttributes = mDictStructurePolicy->getWordAttributesInContext(
            mPrevWordIds.data(), targetWordId, nullptr /* multiBigramMap */);
            mPrevWordIds, targetWordId, nullptr /* multiBigramMap */);
    mSuggestionResults->addPrediction(targetWordCodePoints, codePointCount,
            wordAttributes.getProbability());
}
@@ -93,13 +93,13 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi
void Dictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo,
        SuggestionResults *const outSuggestionResults) const {
    TimeKeeper::setCurrentTime();
    int prevWordIds[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
    prevWordsInfo->getPrevWordIds(mDictionaryStructureWithBufferPolicy.get(), prevWordIds,
    WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIds;
    prevWordsInfo->getPrevWordIds(mDictionaryStructureWithBufferPolicy.get(), prevWordIds.data(),
            true /* tryLowerCaseSearch */);
    NgramListenerForPrediction listener(prevWordsInfo,
            WordIdArrayView::fromFixedSizeArray(prevWordIds), outSuggestionResults,
    const WordIdArrayView prevWordIdArrayView = WordIdArrayView::fromArray(prevWordIds);
    NgramListenerForPrediction listener(prevWordsInfo, prevWordIdArrayView, outSuggestionResults,
            mDictionaryStructureWithBufferPolicy.get());
    mDictionaryStructureWithBufferPolicy->iterateNgramEntries(prevWordIds, &listener);
    mDictionaryStructureWithBufferPolicy->iterateNgramEntries(prevWordIdArrayView, &listener);
}

int Dictionary::getProbability(const int *word, int length) const {
@@ -119,13 +119,13 @@ int Dictionary::getNgramProbability(const PrevWordsInfo *const prevWordsInfo, co
            CodePointArrayView(word, length), false /* forceLowerCaseSearch */);
    if (wordId == NOT_A_WORD_ID) return NOT_A_PROBABILITY;
    if (!prevWordsInfo) {
        return getDictionaryStructurePolicy()->getProbabilityOfWord(
                nullptr /* prevWordsPtNodePos */, wordId);
        return getDictionaryStructurePolicy()->getProbabilityOfWord(WordIdArrayView(), wordId);
    }
    int prevWordIds[MAX_PREV_WORD_COUNT_FOR_N_GRAM];
    prevWordsInfo->getPrevWordIds(mDictionaryStructureWithBufferPolicy.get(), prevWordIds,
    WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIds;
    prevWordsInfo->getPrevWordIds(mDictionaryStructureWithBufferPolicy.get(), prevWordIds.data(),
            true /* tryLowerCaseSearch */);
    return getDictionaryStructurePolicy()->getProbabilityOfWord(prevWordIds, wordId);
    return getDictionaryStructurePolicy()->getProbabilityOfWord(
            IntArrayView::fromArray(prevWordIds), wordId);
}

bool Dictionary::addUnigramEntry(const int *const word, const int length,
Loading