From f3948c1eacee57a9ba4b689ada992cd460596d9f Mon Sep 17 00:00:00 2001 From: satok Date: Thu, 11 Aug 2011 16:27:28 +0900 Subject: Calculate the skip correction by one loop Change-Id: Ie70829407cd58be2ffe75c7d649d86f62ee4df24 --- native/src/correction.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'native/src/correction.cpp') 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. -- cgit v1.2.3-83-g751a