Loading native/jni/src/suggest/core/dicnode/dic_node.h +6 −8 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); Loading Loading @@ -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(); } Loading native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading native/jni/src/suggest/core/dicnode/dic_node_utils.h +2 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define LATINIME_DIC_NODE_UTILS_H #include "defines.h" #include "utils/int_array_view.h" namespace latinime { Loading @@ -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); Loading native/jni/src/suggest/core/dicnode/internal/dic_node_properties.h +13 −9 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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) { Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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 { Loading @@ -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 native/jni/src/suggest/core/dictionary/dictionary.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -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()); } Loading @@ -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 { Loading @@ -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 Loading
native/jni/src/suggest/core/dicnode/dic_node.h +6 −8 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); Loading Loading @@ -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(); } Loading
native/jni/src/suggest/core/dicnode/dic_node_utils.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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); } Loading
native/jni/src/suggest/core/dicnode/dic_node_utils.h +2 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define LATINIME_DIC_NODE_UTILS_H #include "defines.h" #include "utils/int_array_view.h" namespace latinime { Loading @@ -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); Loading
native/jni/src/suggest/core/dicnode/internal/dic_node_properties.h +13 −9 Original line number Diff line number Diff line Loading @@ -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 { Loading @@ -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) { Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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 { Loading @@ -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
native/jni/src/suggest/core/dictionary/dictionary.cpp +11 −11 Original line number Diff line number Diff line Loading @@ -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()); } Loading @@ -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 { Loading @@ -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