Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1026)

Unified Diff: third_party/android_prediction/suggest/core/layout/proximity_info_state.h

Issue 1247903003: Add spellcheck and word suggestion to the prediction service (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: format README and CHROMIUM.diff Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/android_prediction/suggest/core/layout/proximity_info_state.h
diff --git a/third_party/android_prediction/suggest/core/layout/proximity_info_state.h b/third_party/android_prediction/suggest/core/layout/proximity_info_state.h
new file mode 100644
index 0000000000000000000000000000000000000000..7068f0bcd1ebc8c4df8b5b34a7b501e83fddef8c
--- /dev/null
+++ b/third_party/android_prediction/suggest/core/layout/proximity_info_state.h
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LATINIME_PROXIMITY_INFO_STATE_H
+#define LATINIME_PROXIMITY_INFO_STATE_H
+
+#include <cstring> // for memset()
+#include <unordered_map>
+#include <vector>
+
+#include "third_party/android_prediction/defines.h"
+#include "third_party/android_prediction/suggest/core/layout/proximity_info_params.h"
+#include "third_party/android_prediction/suggest/core/layout/proximity_info_state_utils.h"
+
+namespace latinime {
+
+class ProximityInfo;
+
+class ProximityInfoState {
+ public:
+ /////////////////////////////////////////
+ // Defined in proximity_info_state.cpp //
+ /////////////////////////////////////////
+ void initInputParams(const int pointerId, const float maxPointToKeyLength,
+ const ProximityInfo *proximityInfo, const int *const inputCodes,
+ const int inputSize, const int *xCoordinates, const int *yCoordinates,
+ const int *const times, const int *const pointerIds, const bool isGeometric);
+
+ /////////////////////////////////////////
+ // Defined here //
+ /////////////////////////////////////////
+ AK_FORCE_INLINE ProximityInfoState()
+ : mProximityInfo(nullptr), mMaxPointToKeyLength(0.0f), mAverageSpeed(0.0f),
+ mHasTouchPositionCorrectionData(false), mMostCommonKeyWidthSquare(0),
+ mKeyCount(0), mCellHeight(0), mCellWidth(0), mGridHeight(0), mGridWidth(0),
+ mIsContinuousSuggestionPossible(false), mHasBeenUpdatedByGeometricInput(false),
+ mSampledInputXs(), mSampledInputYs(), mSampledTimes(), mSampledInputIndice(),
+ mSampledLengthCache(), mBeelineSpeedPercentiles(),
+ mSampledNormalizedSquaredLengthCache(), mSpeedRates(), mDirections(),
+ mCharProbabilities(), mSampledSearchKeySets(), mSampledSearchKeyVectors(),
+ mTouchPositionCorrectionEnabled(false), mSampledInputSize(0),
+ mMostProbableStringProbability(0.0f) {
+ memset(mInputProximities, 0, sizeof(mInputProximities));
+ memset(mPrimaryInputWord, 0, sizeof(mPrimaryInputWord));
+ memset(mMostProbableString, 0, sizeof(mMostProbableString));
+ }
+
+ // Non virtual inline destructor -- never inherit this class
+ AK_FORCE_INLINE ~ProximityInfoState() {}
+
+ inline int getPrimaryCodePointAt(const int index) const {
+ return getProximityCodePointsAt(index)[0];
+ }
+
+ int getPrimaryOriginalCodePointAt(const int index) const;
+
+ inline bool sameAsTyped(const int *word, int length) const {
+ if (length != mSampledInputSize) {
+ return false;
+ }
+ const int *inputProximities = mInputProximities;
+ while (length--) {
+ if (*inputProximities != *word) {
+ return false;
+ }
+ inputProximities += MAX_PROXIMITY_CHARS_SIZE;
+ word++;
+ }
+ return true;
+ }
+
+ 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) {
+ if (codePoints[i++] == c) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ AK_FORCE_INLINE bool existsAdjacentProximityChars(const int index) const {
+ if (index < 0 || index >= mSampledInputSize) return false;
+ const int currentCodePoint = getPrimaryCodePointAt(index);
+ const int leftIndex = index - 1;
+ if (leftIndex >= 0 && existsCodePointInProximityAt(leftIndex, currentCodePoint)) {
+ return true;
+ }
+ const int rightIndex = index + 1;
+ if (rightIndex < mSampledInputSize
+ && existsCodePointInProximityAt(rightIndex, currentCodePoint)) {
+ return true;
+ }
+ return false;
+ }
+
+ inline bool touchPositionCorrectionEnabled() const {
+ return mTouchPositionCorrectionEnabled;
+ }
+
+ bool isUsed() const {
+ return mSampledInputSize > 0;
+ }
+
+ int size() const {
+ return mSampledInputSize;
+ }
+
+ int getInputX(const int index) const {
+ return mSampledInputXs[index];
+ }
+
+ int getInputY(const int index) const {
+ return mSampledInputYs[index];
+ }
+
+ int getInputIndexOfSampledPoint(const int sampledIndex) const {
+ return mSampledInputIndice[sampledIndex];
+ }
+
+ bool hasSpaceProximity(const int index) const;
+
+ int getLengthCache(const int index) const {
+ return mSampledLengthCache[index];
+ }
+
+ bool isContinuousSuggestionPossible() const {
+ return mIsContinuousSuggestionPossible;
+ }
+
+ // TODO: Rename s/Length/NormalizedSquaredLength/
+ float getPointToKeyByIdLength(const int inputIndex, const int keyId) const;
+ // TODO: Rename s/Length/NormalizedSquaredLength/
+ float getPointToKeyLength(const int inputIndex, const int codePoint) const;
+
+ ProximityType getProximityType(const int index, const int codePoint,
+ const bool checkProximityChars, int *proximityIndex = 0) const;
+
+ ProximityType getProximityTypeG(const int index, const int codePoint) const;
+
+ float getSpeedRate(const int index) const {
+ return mSpeedRates[index];
+ }
+
+ AK_FORCE_INLINE int getBeelineSpeedPercentile(const int id) const {
+ return mBeelineSpeedPercentiles[id];
+ }
+
+ AK_FORCE_INLINE DoubleLetterLevel getDoubleLetterLevel(const int id) const {
+ const int beelineSpeedRate = getBeelineSpeedPercentile(id);
+ if (beelineSpeedRate == 0) {
+ return A_STRONG_DOUBLE_LETTER;
+ } else if (beelineSpeedRate
+ < ProximityInfoParams::MIN_DOUBLE_LETTER_BEELINE_SPEED_PERCENTILE) {
+ return A_DOUBLE_LETTER;
+ } else {
+ return NOT_A_DOUBLE_LETTER;
+ }
+ }
+
+ float getDirection(const int index) const {
+ return mDirections[index];
+ }
+ // get xy direction
+ float getDirection(const int x, const int y) const;
+
+ float getMostProbableString(int *const codePointBuf) const;
+
+ float getProbability(const int index, const int charCode) const;
+
+ bool isKeyInSerchKeysAfterIndex(const int index, const int keyId) const;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ProximityInfoState);
+
+ inline const int *getProximityCodePointsAt(const int index) const {
+ return ProximityInfoStateUtils::getProximityCodePointsAt(mInputProximities, index);
+ }
+
+ // const
+ const ProximityInfo *mProximityInfo;
+ float mMaxPointToKeyLength;
+ float mAverageSpeed;
+ bool mHasTouchPositionCorrectionData;
+ int mMostCommonKeyWidthSquare;
+ int mKeyCount;
+ int mCellHeight;
+ int mCellWidth;
+ int mGridHeight;
+ int mGridWidth;
+ bool mIsContinuousSuggestionPossible;
+ bool mHasBeenUpdatedByGeometricInput;
+
+ std::vector<int> mSampledInputXs;
+ std::vector<int> mSampledInputYs;
+ std::vector<int> mSampledTimes;
+ std::vector<int> mSampledInputIndice;
+ std::vector<int> mSampledLengthCache;
+ std::vector<int> mBeelineSpeedPercentiles;
+ std::vector<float> mSampledNormalizedSquaredLengthCache;
+ std::vector<float> mSpeedRates;
+ std::vector<float> mDirections;
+ // probabilities of skipping or mapping to a key for each point.
+ std::vector<std::unordered_map<int, float>> mCharProbabilities;
+ // 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<ProximityInfoStateUtils::NearKeycodesSet> mSampledSearchKeySets;
+ std::vector<std::vector<int>> mSampledSearchKeyVectors;
+ bool mTouchPositionCorrectionEnabled;
+ int mInputProximities[MAX_PROXIMITY_CHARS_SIZE * MAX_WORD_LENGTH];
+ int mSampledInputSize;
+ int mPrimaryInputWord[MAX_WORD_LENGTH];
+ float mMostProbableStringProbability;
+ int mMostProbableString[MAX_WORD_LENGTH];
+};
+} // namespace latinime
+#endif // LATINIME_PROXIMITY_INFO_STATE_H

Powered by Google App Engine
This is Rietveld 408576698