diff options
Diffstat (limited to 'native/jni/src/proximity_info_state.h')
-rw-r--r-- | native/jni/src/proximity_info_state.h | 75 |
1 files changed, 20 insertions, 55 deletions
diff --git a/native/jni/src/proximity_info_state.h b/native/jni/src/proximity_info_state.h index 0f0eb7d39..8bada277e 100644 --- a/native/jni/src/proximity_info_state.h +++ b/native/jni/src/proximity_info_state.h @@ -17,13 +17,13 @@ #ifndef LATINIME_PROXIMITY_INFO_STATE_H #define LATINIME_PROXIMITY_INFO_STATE_H -#include <bitset> #include <cstring> // for memset() #include <vector> #include "char_utils.h" #include "defines.h" #include "hash_map_compat.h" +#include "proximity_info_params.h" #include "proximity_info_state_utils.h" namespace latinime { @@ -32,15 +32,8 @@ class ProximityInfo; class ProximityInfoState { public: - typedef std::bitset<MAX_KEY_COUNT_IN_A_KEYBOARD> NearKeycodesSet; - static const int NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR_LOG_2; - static const int NORMALIZED_SQUARED_DISTANCE_SCALING_FACTOR; - static const float NOT_A_DISTANCE_FLOAT; + static const int NOT_A_CODE; - static const int LOOKUP_RADIUS_PERCENTILE; - static const int FIRST_POINT_TIME_OFFSET_MILLIS; - static const int STRONG_DOUBLE_LETTER_TIME_MILLIS; - static const int MIN_DOUBLE_LETTER_BEELINE_SPEED_PERCENTILE; ///////////////////////////////////////// // Defined in proximity_info_state.cpp // @@ -57,10 +50,11 @@ class ProximityInfoState { : mProximityInfo(0), mMaxPointToKeyLength(0.0f), mAverageSpeed(0.0f), mHasTouchPositionCorrectionData(false), mMostCommonKeyWidthSquare(0), mKeyCount(0), mCellHeight(0), mCellWidth(0), mGridHeight(0), mGridWidth(0), - mIsContinuationPossible(false), mSampledInputXs(), mSampledInputYs(), mTimes(), - mInputIndice(), mLengthCache(), mBeelineSpeedPercentiles(), mDistanceCache_G(), - mSpeedRates(), mDirections(), mCharProbabilities(), mNearKeysVector(), - mSearchKeysVector(), mTouchPositionCorrectionEnabled(false), mSampledInputSize(0) { + mIsContinuationPossible(false), mSampledInputXs(), mSampledInputYs(), mSampledTimes(), + mSampledInputIndice(), mSampledLengthCache(), mBeelineSpeedPercentiles(), + mDistanceCache_G(), mSpeedRates(), mDirections(), mCharProbabilities(), + mNearKeysVector(), mSearchKeysVector(), mTouchPositionCorrectionEnabled(false), + mSampledInputSize(0) { memset(mInputProximities, 0, sizeof(mInputProximities)); memset(mNormalizedSquaredDistances, 0, sizeof(mNormalizedSquaredDistances)); memset(mPrimaryInputWord, 0, sizeof(mPrimaryInputWord)); @@ -76,7 +70,7 @@ class ProximityInfoState { AK_FORCE_INLINE bool existsCodePointInProximityAt(const int index, const int c) const { const int *codePoints = getProximityCodePointsAt(index); int i = 0; - while (codePoints[i] > 0 && i < MAX_PROXIMITY_CHARS_SIZE_INTERNAL) { + while (codePoints[i] > 0 && i < MAX_PROXIMITY_CHARS_SIZE) { if (codePoints[i++] == c) { return true; } @@ -102,7 +96,7 @@ class ProximityInfoState { inline int getNormalizedSquaredDistance( const int inputIndex, const int proximityIndex) const { return mNormalizedSquaredDistances[ - inputIndex * MAX_PROXIMITY_CHARS_SIZE_INTERNAL + proximityIndex]; + inputIndex * MAX_PROXIMITY_CHARS_SIZE + proximityIndex]; } inline const int *getPrimaryInputWord() const { @@ -122,7 +116,7 @@ class ProximityInfoState { if (*inputProximities != *word) { return false; } - inputProximities += MAX_PROXIMITY_CHARS_SIZE_INTERNAL; + inputProximities += MAX_PROXIMITY_CHARS_SIZE; word++; } return true; @@ -149,7 +143,7 @@ class ProximityInfoState { bool hasSpaceProximity(const int index) const; int getLengthCache(const int index) const { - return mLengthCache[index]; + return mSampledLengthCache[index]; } bool isContinuationPossible() const { @@ -180,7 +174,8 @@ class ProximityInfoState { const int beelineSpeedRate = getBeelineSpeedPercentile(id); if (beelineSpeedRate == 0) { return A_STRONG_DOUBLE_LETTER; - } else if (beelineSpeedRate < MIN_DOUBLE_LETTER_BEELINE_SPEED_PERCENTILE) { + } else if (beelineSpeedRate + < ProximityInfoParams::MIN_DOUBLE_LETTER_BEELINE_SPEED_PERCENTILE) { return A_DOUBLE_LETTER; } else { return NOT_A_DOUBLE_LETTER; @@ -193,10 +188,6 @@ class ProximityInfoState { // get xy direction float getDirection(const int x, const int y) const; - float getPointAngle(const int index) const; - // Returns angle of three points. x, y, and z are indices. - float getPointsAngle(const int index0, const int index1, const int index2) const; - float getMostProbableString(int *const codePointBuf) const; float getProbability(const int index, const int charCode) const; @@ -207,7 +198,6 @@ class ProximityInfoState { bool isKeyInSerchKeysAfterIndex(const int index, const int keyId) const; private: DISALLOW_COPY_AND_ASSIGN(ProximityInfoState); - typedef hash_map_compat<int, float> NearKeysDistanceMap; ///////////////////////////////////////// // Defined in proximity_info_state.cpp // ///////////////////////////////////////// @@ -216,15 +206,9 @@ class ProximityInfoState { float calculateSquaredDistanceFromSweetSpotCenter( const int keyIndex, const int inputIndex) const; - bool pushTouchPoint(const int inputIndex, const int nodeCodePoint, int x, int y, const int time, - const bool sample, const bool isLastPoint, const float sumAngle, - NearKeysDistanceMap *const currentNearKeysDistances, - const NearKeysDistanceMap *const prevNearKeysDistances, - const NearKeysDistanceMap *const prevPrevNearKeysDistances); ///////////////////////////////////////// // Defined here // ///////////////////////////////////////// - inline float square(const float x) const { return x * x; } bool hasInputCoordinates() const { return mSampledInputXs.size() > 0 && mSampledInputYs.size() > 0; @@ -233,28 +217,9 @@ class ProximityInfoState { inline const int *getProximityCodePointsAt(const int index) const { return ProximityInfoStateUtils::getProximityCodePointsAt(mInputProximities, index); } - - float updateNearKeysDistances(const int x, const int y, - NearKeysDistanceMap *const currentNearKeysDistances); - bool isPrevLocalMin(const NearKeysDistanceMap *const currentNearKeysDistances, - const NearKeysDistanceMap *const prevNearKeysDistances, - const NearKeysDistanceMap *const prevPrevNearKeysDistances) const; - float getPointScore( - const int x, const int y, const int time, const bool last, const float nearest, - const float sumAngle, const NearKeysDistanceMap *const currentNearKeysDistances, - const NearKeysDistanceMap *const prevNearKeysDistances, - const NearKeysDistanceMap *const prevPrevNearKeysDistances) const; bool checkAndReturnIsContinuationPossible(const int inputSize, const int *const xCoordinates, const int *const yCoordinates, const int *const times, const bool isGeometric) const; void popInputData(); - void updateAlignPointProbabilities(const int start); - bool suppressCharProbabilities(const int index1, const int index2); - void refreshSpeedRates(const int inputSize, const int *const xCoordinates, - const int *const yCoordinates, const int *const times, const int lastSavedInputSize); - void refreshBeelineSpeedRates(const int inputSize, - const int *const xCoordinates, const int *const yCoordinates, const int * times); - float calculateBeelineSpeedRate(const int id, const int inputSize, - const int *const xCoordinates, const int *const yCoordinates, const int * times) const; // const const ProximityInfo *mProximityInfo; @@ -271,9 +236,9 @@ class ProximityInfoState { std::vector<int> mSampledInputXs; std::vector<int> mSampledInputYs; - std::vector<int> mTimes; - std::vector<int> mInputIndice; - std::vector<int> mLengthCache; + std::vector<int> mSampledTimes; + std::vector<int> mSampledInputIndice; + std::vector<int> mSampledLengthCache; std::vector<int> mBeelineSpeedPercentiles; std::vector<float> mDistanceCache_G; std::vector<float> mSpeedRates; @@ -283,15 +248,15 @@ class ProximityInfoState { // The vector for the key code set which holds nearby keys for each sampled input point // 1. Used to calculate the probability of the key // 2. Used to calculate mSearchKeysVector - std::vector<NearKeycodesSet> mNearKeysVector; + std::vector<ProximityInfoStateUtils::NearKeycodesSet> mNearKeysVector; // The vector for the key code set which holds nearby keys of some trailing sampled input points // for each sampled input point. These nearby keys contain the next characters which can be in // the dictionary. Specifically, currently we are looking for keys nearby trailing sampled // inputs including the current input point. - std::vector<NearKeycodesSet> mSearchKeysVector; + std::vector<ProximityInfoStateUtils::NearKeycodesSet> mSearchKeysVector; bool mTouchPositionCorrectionEnabled; - int mInputProximities[MAX_PROXIMITY_CHARS_SIZE_INTERNAL * MAX_WORD_LENGTH]; - int mNormalizedSquaredDistances[MAX_PROXIMITY_CHARS_SIZE_INTERNAL * MAX_WORD_LENGTH]; + int mInputProximities[MAX_PROXIMITY_CHARS_SIZE * MAX_WORD_LENGTH]; + int mNormalizedSquaredDistances[MAX_PROXIMITY_CHARS_SIZE * MAX_WORD_LENGTH]; int mSampledInputSize; int mPrimaryInputWord[MAX_WORD_LENGTH]; }; |