From 0519fdd18ac4414b8298d3338db1c8ccce032170 Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Wed, 12 Dec 2012 20:19:18 +0900 Subject: [PATCH] Fix typing incremental decoder Change-Id: Ia55d5c0200738c81f93530b3680bc3f37c0b2e28 --- native/jni/src/proximity_info_state.cpp | 24 ++++++++++++++++++++---- native/jni/src/proximity_info_state.h | 4 +++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/native/jni/src/proximity_info_state.cpp b/native/jni/src/proximity_info_state.cpp index 31938a20c..549ac3544 100644 --- a/native/jni/src/proximity_info_state.cpp +++ b/native/jni/src/proximity_info_state.cpp @@ -668,11 +668,15 @@ int ProximityInfoState::getDuration(const int index) const { return 0; } -float ProximityInfoState::getPointToKeyLength(const int inputIndex, const int codePoint) const { +// TODO: Remove the "scale" parameter +// This function basically converts from a length to an edit distance. Accordingly, it's obviously +// wrong to compare with mMaxPointToKeyLength. +float ProximityInfoState::getPointToKeyLength( + const int inputIndex, const int codePoint, const float scale) const { const int keyId = mProximityInfo->getKeyIndexOf(codePoint); if (keyId != NOT_AN_INDEX) { const int index = inputIndex * mProximityInfo->getKeyCount() + keyId; - return min(mDistanceCache[index], mMaxPointToKeyLength); + return min(mDistanceCache[index] * scale, mMaxPointToKeyLength); } if (isSkippableCodePoint(codePoint)) { return 0.0f; @@ -681,15 +685,27 @@ float ProximityInfoState::getPointToKeyLength(const int inputIndex, const int co return MAX_POINT_TO_KEY_LENGTH; } -float ProximityInfoState::getPointToKeyByIdLength(const int inputIndex, const int keyId) const { +float ProximityInfoState::getPointToKeyLength(const int inputIndex, const int codePoint) const { + return getPointToKeyLength(inputIndex, codePoint, 1.0f); +} + +// TODO: Remove the "scale" parameter +// This function basically converts from a length to an edit distance. Accordingly, it's obviously +// wrong to compare with mMaxPointToKeyLength. +float ProximityInfoState::getPointToKeyByIdLength( + const int inputIndex, const int keyId, const float scale) const { if (keyId != NOT_AN_INDEX) { const int index = inputIndex * mProximityInfo->getKeyCount() + keyId; - return min(mDistanceCache[index], mMaxPointToKeyLength); + return min(mDistanceCache[index] * scale, mMaxPointToKeyLength); } // If the char is not a key on the keyboard then return the max length. return static_cast(MAX_POINT_TO_KEY_LENGTH); } +float ProximityInfoState::getPointToKeyByIdLength(const int inputIndex, const int keyId) const { + return getPointToKeyByIdLength(inputIndex, keyId, 1.0f); +} + // In the following function, c is the current character of the dictionary word currently examined. // currentChars is an array containing the keys close to the character the user actually typed at // the same position. We want to see if c is in it: if so, then the word contains at that position diff --git a/native/jni/src/proximity_info_state.h b/native/jni/src/proximity_info_state.h index dd979653f..b1ad3731e 100644 --- a/native/jni/src/proximity_info_state.h +++ b/native/jni/src/proximity_info_state.h @@ -155,8 +155,10 @@ class ProximityInfoState { return mIsContinuationPossible; } - float getPointToKeyLength(const int inputIndex, const int charCode) const; + float getPointToKeyByIdLength(const int inputIndex, const int keyId, const float scale) const; float getPointToKeyByIdLength(const int inputIndex, const int keyId) const; + float getPointToKeyLength(const int inputIndex, const int codePoint, const float scale) const; + float getPointToKeyLength(const int inputIndex, const int codePoint) const; ProximityType getMatchedProximityId(const int index, const int c, const bool checkProximityChars, int *proximityIndex = 0) const;