diff options
Diffstat (limited to 'native')
5 files changed, 37 insertions, 35 deletions
diff --git a/native/jni/src/suggest/core/dicnode/dic_node.h b/native/jni/src/suggest/core/dicnode/dic_node.h index 9069bb10c..65dad5677 100644 --- a/native/jni/src/suggest/core/dicnode/dic_node.h +++ b/native/jni/src/suggest/core/dicnode/dic_node.h @@ -36,7 +36,7 @@ #define DUMP_WORD_AND_SCORE(header) \ do { char charBuf[50]; char prevWordCharBuf[50]; \ INTS_TO_CHARS(getOutputWordBuf(), getNodeCodePointCount(), charBuf, NELEMS(charBuf)); \ - INTS_TO_CHARS(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, \ + INTS_TO_CHARS(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), \ mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(), prevWordCharBuf, \ NELEMS(prevWordCharBuf)); \ AKLOGI("#%8s, %5f, %5f, %5f, %5f, %s, %s, %d, %5f,", header, \ @@ -130,22 +130,9 @@ class DicNode { NOT_A_PROBABILITY /* probability */, false /* isTerminal */, true /* hasChildren */, false /* isBlacklistedOrNotAWord */, 0 /* depth */, 0 /* terminalDepth */); - // TODO: Move to dicNodeState? - mDicNodeState.mDicNodeStateOutput.init(); // reset for next word - mDicNodeState.mDicNodeStateInput.init( - &dicNode->mDicNodeState.mDicNodeStateInput, true /* resetTerminalDiffCost */); - mDicNodeState.mDicNodeStateScoring.init( - &dicNode->mDicNodeState.mDicNodeStateScoring); - mDicNodeState.mDicNodeStatePrevWord.init( - dicNode->mDicNodeState.mDicNodeStatePrevWord.getPrevWordCount() + 1, - dicNode->mDicNodeProperties.getProbability(), + mDicNodeState.initAsRootWithPreviousWord(&dicNode->mDicNodeState, dicNode->mDicNodeProperties.getPtNodePos(), - dicNode->mDicNodeState.mDicNodeStatePrevWord.mPrevWord, - dicNode->mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(), - dicNode->getOutputWordBuf(), - dicNode->mDicNodeProperties.getDepth(), - dicNode->mDicNodeState.mDicNodeStatePrevWord.getSecondWordFirstInputIndex(), - mDicNodeState.mDicNodeStateInput.getInputIndex(0) /* lastInputIndex */); + dicNode->mDicNodeProperties.getDepth()); PROF_NODE_COPY(&dicNode->mProfiler, mProfiler); } @@ -231,7 +218,7 @@ class DicNode { } bool isFirstCharUppercase() const { - const int c = getOutputWordBuf()[0]; + const int c = mDicNodeState.mDicNodeStateOutput.getCodePointAt(0); return CharUtils::isAsciiUpper(c); } @@ -326,7 +313,7 @@ class DicNode { void outputResult(int *dest) const { const uint16_t prevWordLength = mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength(); const uint16_t currentDepth = getNodeCodePointCount(); - DicNodeUtils::appendTwoWords(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, + DicNodeUtils::appendTwoWords(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), prevWordLength, getOutputWordBuf(), currentDepth, dest); DUMP_WORD_AND_SCORE("OUTPUT"); } @@ -337,7 +324,7 @@ class DicNode { // are concatenated together in mPrevWord - which contains a space at the end. int getTotalNodeSpaceCount() const { if (isFirstWord()) return 0; - return CharUtils::getSpaceCount(mDicNodeState.mDicNodeStatePrevWord.mPrevWord, + return CharUtils::getSpaceCount(mDicNodeState.mDicNodeStatePrevWord.getPrevWordBuf(), mDicNodeState.mDicNodeStatePrevWord.getPrevWordLength()); } @@ -389,7 +376,7 @@ class DicNode { } AK_FORCE_INLINE const int *getOutputWordBuf() const { - return mDicNodeState.mDicNodeStateOutput.mCodePointsBuf; + return mDicNodeState.mDicNodeStateOutput.getCodePointBuf(); } int getPrevCodePointG(int pointerId) const { diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h index f79ac7b2c..a41667567 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state.h @@ -58,6 +58,24 @@ class DicNodeState { mDicNodeStateScoring.init(); } + // Init with previous word. + void initAsRootWithPreviousWord(const DicNodeState *prevWordDicNodeState, + const int prevWordPos, const int prevWordCodePointCount) { + mDicNodeStateOutput.init(); // reset for next word + mDicNodeStateInput.init( + &prevWordDicNodeState->mDicNodeStateInput, true /* resetTerminalDiffCost */); + mDicNodeStateScoring.init(&prevWordDicNodeState->mDicNodeStateScoring); + mDicNodeStatePrevWord.init( + prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordCount() + 1, + prevWordPos, + prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordBuf(), + prevWordDicNodeState->mDicNodeStatePrevWord.getPrevWordLength(), + prevWordDicNodeState->mDicNodeStateOutput.getCodePointBuf(), + prevWordCodePointCount, + prevWordDicNodeState->mDicNodeStatePrevWord.getSecondWordFirstInputIndex(), + prevWordDicNodeState->mDicNodeStateInput.getInputIndex(0) /* lastInputIndex */); + } + // Init by copy AK_FORCE_INLINE void init(const DicNodeState *const src) { mDicNodeStateInput.init(&src->mDicNodeStateInput); diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h index 011d020c4..bdb182c1d 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_output.h @@ -61,18 +61,19 @@ class DicNodeStateOutput { } } - // TODO: Remove int getCodePointAt(const int index) const { return mCodePointsBuf[index]; } - // TODO: Move to private - int mCodePointsBuf[MAX_WORD_LENGTH]; + const int *getCodePointBuf() const { + return mCodePointsBuf; + } private: DISALLOW_COPY_AND_ASSIGN(DicNodeStateOutput); uint16_t mOutputtedCodePointCount; + int mCodePointsBuf[MAX_WORD_LENGTH]; }; } // namespace latinime #endif // LATINIME_DIC_NODE_STATE_OUTPUT_H diff --git a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h index a35eb5124..f2b1ce8f7 100644 --- a/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h +++ b/native/jni/src/suggest/core/dicnode/internal/dic_node_state_prevword.h @@ -30,7 +30,7 @@ namespace latinime { class DicNodeStatePrevWord { public: AK_FORCE_INLINE DicNodeStatePrevWord() - : mPrevWordCount(0), mPrevWordLength(0), mPrevWordStart(0), mPrevWordProbability(0), + : mPrevWordCount(0), mPrevWordLength(0), mPrevWordStart(0), mPrevWordPtNodePos(NOT_A_DICT_POS), mSecondWordFirstInputIndex(NOT_AN_INDEX) {} ~DicNodeStatePrevWord() {} @@ -39,7 +39,6 @@ class DicNodeStatePrevWord { mPrevWordLength = 0; mPrevWordCount = 0; mPrevWordStart = 0; - mPrevWordProbability = -1; mPrevWordPtNodePos = prevWordNodePos; mSecondWordFirstInputIndex = NOT_AN_INDEX; mPrevWord[0] = 0; @@ -50,18 +49,15 @@ class DicNodeStatePrevWord { mPrevWordLength = prevWord->mPrevWordLength; mPrevWordCount = prevWord->mPrevWordCount; mPrevWordStart = prevWord->mPrevWordStart; - mPrevWordProbability = prevWord->mPrevWordProbability; mPrevWordPtNodePos = prevWord->mPrevWordPtNodePos; mSecondWordFirstInputIndex = prevWord->mSecondWordFirstInputIndex; memmove(mPrevWord, prevWord->mPrevWord, prevWord->mPrevWordLength * sizeof(mPrevWord[0])); } - void init(const int16_t prevWordCount, const int16_t prevWordProbability, - const int prevWordNodePos, const int *const src0, const int16_t length0, - const int *const src1, const int16_t length1, + void init(const int16_t prevWordCount, const int prevWordNodePos, const int *const src0, + const int16_t length0, const int *const src1, const int16_t length1, const int prevWordSecondWordFirstInputIndex, const int lastInputIndex) { mPrevWordCount = std::min(prevWordCount, static_cast<int16_t>(MAX_RESULTS)); - mPrevWordProbability = prevWordProbability; mPrevWordPtNodePos = prevWordNodePos; int twoWordsLen = DicNodeUtils::appendTwoWords(src0, length0, src1, length1, mPrevWord); @@ -127,8 +123,9 @@ class DicNodeStatePrevWord { return true; } - // TODO: Move to private - int mPrevWord[MAX_WORD_LENGTH]; + const int *getPrevWordBuf() const { + return mPrevWord; + } private: DISALLOW_COPY_AND_ASSIGN(DicNodeStatePrevWord); @@ -136,9 +133,9 @@ class DicNodeStatePrevWord { int16_t mPrevWordCount; int16_t mPrevWordLength; int16_t mPrevWordStart; - int16_t mPrevWordProbability; int mPrevWordPtNodePos; int mSecondWordFirstInputIndex; + int mPrevWord[MAX_WORD_LENGTH]; }; } // namespace latinime #endif // LATINIME_DIC_NODE_STATE_PREVWORD_H diff --git a/native/jni/src/suggest/policyimpl/typing/typing_traversal.h b/native/jni/src/suggest/policyimpl/typing/typing_traversal.h index 3db00ad3a..7c86b7dc9 100644 --- a/native/jni/src/suggest/policyimpl/typing/typing_traversal.h +++ b/native/jni/src/suggest/policyimpl/typing/typing_traversal.h @@ -162,9 +162,8 @@ class TypingTraversal : public Traversal { if (probability < ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY) { return false; } - const int c = dicNode->getOutputWordBuf()[0]; const bool shortCappedWord = dicNode->getNodeCodePointCount() - < ScoringParams::THRESHOLD_SHORT_WORD_LENGTH && CharUtils::isAsciiUpper(c); + < ScoringParams::THRESHOLD_SHORT_WORD_LENGTH && dicNode->isFirstCharUppercase(); return !shortCappedWord || probability >= ScoringParams::THRESHOLD_NEXT_WORD_PROBABILITY_FOR_CAPPED; } |