diff options
author | 2011-08-11 16:27:28 +0900 | |
---|---|---|
committer | 2011-08-11 17:18:23 +0900 | |
commit | f3948c1eacee57a9ba4b689ada992cd460596d9f (patch) | |
tree | 3938e7e093efadfa52c16a84a3b53cbd23f91a68 /native/src/correction.cpp | |
parent | 635f68e8222901d607a5ca6fab95985bc496d72a (diff) | |
download | latinime-f3948c1eacee57a9ba4b689ada992cd460596d9f.tar.gz latinime-f3948c1eacee57a9ba4b689ada992cd460596d9f.tar.xz latinime-f3948c1eacee57a9ba4b689ada992cd460596d9f.zip |
Calculate the skip correction by one loop
Change-Id: Ie70829407cd58be2ffe75c7d649d86f62ee4df24
Diffstat (limited to 'native/src/correction.cpp')
-rw-r--r-- | native/src/correction.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/native/src/correction.cpp b/native/src/correction.cpp index 654d4715f..a05be55c7 100644 --- a/native/src/correction.cpp +++ b/native/src/correction.cpp @@ -54,11 +54,16 @@ void Correction::initCorrection(const ProximityInfo *pi, const int inputLength, void Correction::initCorrectionState( const int rootPos, const int childCount, const bool traverseAll) { latinime::initCorrectionState(mCorrectionStates, rootPos, childCount, traverseAll); + // TODO: remove + mCorrectionStates[0].mSkipPos = mSkipPos; } void Correction::setCorrectionParams(const int skipPos, const int excessivePos, const int transposedPos, const int spaceProximityPos, const int missingSpacePos) { + // TODO: remove mSkipPos = skipPos; + // TODO: remove + mCorrectionStates[0].mSkipPos = skipPos; mExcessivePos = excessivePos; mTransposedPos = transposedPos; mSpaceProximityPos = spaceProximityPos; @@ -111,6 +116,7 @@ bool Correction::initProcessState(const int outputIndex) { mNeedsToTraverseAllNodes = mCorrectionStates[outputIndex].mNeedsToTraverseAllNodes; mDiffs = mCorrectionStates[outputIndex].mDiffs; mSkippedCount = mCorrectionStates[outputIndex].mSkippedCount; + mSkipPos = mCorrectionStates[outputIndex].mSkipPos; mSkipping = false; mMatching = false; return true; @@ -158,6 +164,7 @@ void Correction::incrementOutputIndex() { mCorrectionStates[mOutputIndex].mDiffs = mDiffs; mCorrectionStates[mOutputIndex].mSkippedCount = mSkippedCount; mCorrectionStates[mOutputIndex].mSkipping = mSkipping; + mCorrectionStates[mOutputIndex].mSkipPos = mSkipPos; mCorrectionStates[mOutputIndex].mMatching = mMatching; } @@ -195,6 +202,12 @@ Correction::CorrectionType Correction::processCharAndCalcState( bool skip = false; if (mSkipPos >= 0) { + if (mSkippedCount == 0 && mSkipPos < mOutputIndex) { + if (DEBUG_DICT) { + assert(mSkipPos == mOutputIndex - 1); + } + ++mSkipPos; + } skip = mSkipPos == mOutputIndex; mSkipping = true; } @@ -229,11 +242,6 @@ Correction::CorrectionType Correction::processCharAndCalcState( } } - // TODO: remove after allowing combination errors - if (skip) { - return UNRELATED; - } - mWord[mOutputIndex] = c; // If inputIndex is greater than mInputLength, that means there is no // proximity chars. So, we don't need to check proximity. |