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

Unified Diff: third_party/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: 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/prediction/suggest/core/layout/proximity_info_state.h
diff --git a/third_party/prediction/suggest/core/layout/proximity_info_state.h b/third_party/prediction/suggest/core/layout/proximity_info_state.h
new file mode 100644
index 0000000000000000000000000000000000000000..c4cb4a61dcfbb849cdfb33fb5e231baef608d10a
--- /dev/null
+++ b/third_party/prediction/suggest/core/layout/proximity_info_state.h
@@ -0,0 +1,254 @@
+/*
+ * 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/prediction/defines.h"
+#include "third_party/prediction/suggest/core/layout/proximity_info_params.h"
+#include "third_party/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