aboutsummaryrefslogtreecommitdiffstats
path: root/native/jni/src
diff options
context:
space:
mode:
Diffstat (limited to 'native/jni/src')
-rw-r--r--native/jni/src/char_utils.h11
-rw-r--r--native/jni/src/proximity_info_state.cpp62
-rw-r--r--native/jni/src/proximity_info_state.h18
-rw-r--r--native/jni/src/proximity_info_state_utils.cpp96
-rw-r--r--native/jni/src/proximity_info_state_utils.h25
5 files changed, 110 insertions, 102 deletions
diff --git a/native/jni/src/char_utils.h b/native/jni/src/char_utils.h
index 60da203b9..7a4384dbb 100644
--- a/native/jni/src/char_utils.h
+++ b/native/jni/src/char_utils.h
@@ -72,5 +72,16 @@ inline static bool isSkippableCodePoint(const int codePoint) {
// TODO: Do not hardcode here
return codePoint == KEYCODE_SINGLE_QUOTE || codePoint == KEYCODE_HYPHEN_MINUS;
}
+
+inline static int getCodePointCount(const int arraySize, const int *const codePoints) {
+ int size = 0;
+ for (; size < arraySize; ++size) {
+ if (codePoints[size] == '\0') {
+ break;
+ }
+ }
+ return size;
+}
+
} // namespace latinime
#endif // LATINIME_CHAR_UTILS_H
diff --git a/native/jni/src/proximity_info_state.cpp b/native/jni/src/proximity_info_state.cpp
index e720275d0..f78b84e88 100644
--- a/native/jni/src/proximity_info_state.cpp
+++ b/native/jni/src/proximity_info_state.cpp
@@ -33,8 +33,10 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
const ProximityInfo *proximityInfo, const int *const inputCodes, const int inputSize,
const int *const xCoordinates, const int *const yCoordinates, const int *const times,
const int *const pointerIds, const bool isGeometric) {
- mIsContinuationPossible = checkAndReturnIsContinuationPossible(
- inputSize, xCoordinates, yCoordinates, times, isGeometric);
+ ASSERT(isGeometric || (inputSize < MAX_WORD_LENGTH));
+ mIsContinuationPossible = ProximityInfoStateUtils::checkAndReturnIsContinuationPossible(
+ inputSize, xCoordinates, yCoordinates, times, mSampledInputSize, &mSampledInputXs,
+ &mSampledInputYs, &mSampledTimes, &mSampledInputIndice);
mProximityInfo = proximityInfo;
mHasTouchPositionCorrectionData = proximityInfo->hasTouchPositionCorrectionData();
@@ -71,9 +73,9 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
mSampledTimes.clear();
mSampledInputIndice.clear();
mSampledLengthCache.clear();
- mDistanceCache_G.clear();
- mNearKeysVector.clear();
- mSearchKeysVector.clear();
+ mSampledDistanceCache_G.clear();
+ mSampledNearKeysVector.clear();
+ mSampledSearchKeysVector.clear();
mSpeedRates.clear();
mBeelineSpeedPercentiles.clear();
mCharProbabilities.clear();
@@ -108,16 +110,17 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
ProximityInfoStateUtils::initGeometricDistanceInfos(
mProximityInfo, mProximityInfo->getKeyCount(),
mSampledInputSize, lastSavedInputSize, &mSampledInputXs, &mSampledInputYs,
- &mNearKeysVector, &mSearchKeysVector, &mDistanceCache_G);
+ &mSampledNearKeysVector, &mSampledDistanceCache_G);
if (isGeometric) {
// updates probabilities of skipping or mapping each key for all points.
ProximityInfoStateUtils::updateAlignPointProbabilities(
mMaxPointToKeyLength, mProximityInfo->getMostCommonKeyWidth(),
mProximityInfo->getKeyCount(), lastSavedInputSize, mSampledInputSize,
&mSampledInputXs, &mSampledInputYs, &mSpeedRates, &mSampledLengthCache,
- &mDistanceCache_G, &mNearKeysVector, &mCharProbabilities);
- ProximityInfoStateUtils::updateSearchKeysVector(mProximityInfo, mSampledInputSize,
- lastSavedInputSize, &mSampledLengthCache, &mNearKeysVector, &mSearchKeysVector);
+ &mSampledDistanceCache_G, &mSampledNearKeysVector, &mCharProbabilities);
+ ProximityInfoStateUtils::updateSampledSearchKeysVector(mProximityInfo,
+ mSampledInputSize, lastSavedInputSize, &mSampledLengthCache,
+ &mSampledNearKeysVector, &mSampledSearchKeysVector);
}
}
@@ -148,39 +151,6 @@ void ProximityInfoState::initInputParams(const int pointerId, const float maxPoi
}
}
-bool ProximityInfoState::checkAndReturnIsContinuationPossible(const int inputSize,
- const int *const xCoordinates, const int *const yCoordinates, const int *const times,
- const bool isGeometric) const {
- if (isGeometric) {
- for (int i = 0; i < mSampledInputSize; ++i) {
- const int index = mSampledInputIndice[i];
- if (index > inputSize || xCoordinates[index] != mSampledInputXs[i] ||
- yCoordinates[index] != mSampledInputYs[i] || times[index] != mSampledTimes[i]) {
- return false;
- }
- }
- } else {
- if (inputSize < mSampledInputSize) {
- // Assuming the cache is invalid if the previous input size is larger than the new one.
- return false;
- }
- for (int i = 0; i < mSampledInputSize && i < MAX_WORD_LENGTH; ++i) {
- if (xCoordinates[i] != mSampledInputXs[i]
- || yCoordinates[i] != mSampledInputYs[i]) {
- return false;
- }
- }
- }
- return true;
-}
-
-int ProximityInfoState::getDuration(const int index) const {
- if (index >= 0 && index < mSampledInputSize - 1) {
- return mSampledTimes[index + 1] - mSampledTimes[index];
- }
- return 0;
-}
-
// 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.
@@ -189,7 +159,7 @@ float ProximityInfoState::getPointToKeyLength(
const int keyId = mProximityInfo->getKeyIndexOf(codePoint);
if (keyId != NOT_AN_INDEX) {
const int index = inputIndex * mProximityInfo->getKeyCount() + keyId;
- return min(mDistanceCache_G[index] * scale, mMaxPointToKeyLength);
+ return min(mSampledDistanceCache_G[index] * scale, mMaxPointToKeyLength);
}
if (isSkippableCodePoint(codePoint)) {
return 0.0f;
@@ -206,7 +176,7 @@ float ProximityInfoState::getPointToKeyLength_G(const int inputIndex, const int
float ProximityInfoState::getPointToKeyByIdLength(
const int inputIndex, const int keyId, const float scale) const {
return ProximityInfoStateUtils::getPointToKeyByIdLength(mMaxPointToKeyLength,
- &mDistanceCache_G, mProximityInfo->getKeyCount(), inputIndex, keyId, scale);
+ &mSampledDistanceCache_G, mProximityInfo->getKeyCount(), inputIndex, keyId, scale);
}
float ProximityInfoState::getPointToKeyByIdLength(const int inputIndex, const int keyId) const {
@@ -289,7 +259,7 @@ int ProximityInfoState::getAllPossibleChars(
int newFilterSize = filterSize;
const int keyCount = mProximityInfo->getKeyCount();
for (int j = 0; j < keyCount; ++j) {
- if (mSearchKeysVector[index].test(j)) {
+ if (mSampledSearchKeysVector[index].test(j)) {
const int keyCodePoint = mProximityInfo->getCodePointOf(j);
bool insert = true;
// TODO: Avoid linear search
@@ -310,7 +280,7 @@ int ProximityInfoState::getAllPossibleChars(
bool ProximityInfoState::isKeyInSerchKeysAfterIndex(const int index, const int keyId) const {
ASSERT(keyId >= 0);
ASSERT(index >= 0 && index < mSampledInputSize);
- return mSearchKeysVector[index].test(keyId);
+ return mSampledSearchKeysVector[index].test(keyId);
}
void ProximityInfoState::popInputData() {
diff --git a/native/jni/src/proximity_info_state.h b/native/jni/src/proximity_info_state.h
index 8bada277e..9c4f557e2 100644
--- a/native/jni/src/proximity_info_state.h
+++ b/native/jni/src/proximity_info_state.h
@@ -52,9 +52,9 @@ class ProximityInfoState {
mKeyCount(0), mCellHeight(0), mCellWidth(0), mGridHeight(0), mGridWidth(0),
mIsContinuationPossible(false), mSampledInputXs(), mSampledInputYs(), mSampledTimes(),
mSampledInputIndice(), mSampledLengthCache(), mBeelineSpeedPercentiles(),
- mDistanceCache_G(), mSpeedRates(), mDirections(), mCharProbabilities(),
- mNearKeysVector(), mSearchKeysVector(), mTouchPositionCorrectionEnabled(false),
- mSampledInputSize(0) {
+ mSampledDistanceCache_G(), mSpeedRates(), mDirections(), mCharProbabilities(),
+ mSampledNearKeysVector(), mSampledSearchKeysVector(),
+ mTouchPositionCorrectionEnabled(false), mSampledInputSize(0) {
memset(mInputProximities, 0, sizeof(mInputProximities));
memset(mNormalizedSquaredDistances, 0, sizeof(mNormalizedSquaredDistances));
memset(mPrimaryInputWord, 0, sizeof(mPrimaryInputWord));
@@ -122,8 +122,6 @@ class ProximityInfoState {
return true;
}
- int getDuration(const int index) const;
-
bool isUsed() const {
return mSampledInputSize > 0;
}
@@ -217,8 +215,6 @@ class ProximityInfoState {
inline const int *getProximityCodePointsAt(const int index) const {
return ProximityInfoStateUtils::getProximityCodePointsAt(mInputProximities, index);
}
- bool checkAndReturnIsContinuationPossible(const int inputSize, const int *const xCoordinates,
- const int *const yCoordinates, const int *const times, const bool isGeometric) const;
void popInputData();
// const
@@ -240,20 +236,20 @@ class ProximityInfoState {
std::vector<int> mSampledInputIndice;
std::vector<int> mSampledLengthCache;
std::vector<int> mBeelineSpeedPercentiles;
- std::vector<float> mDistanceCache_G;
+ std::vector<float> mSampledDistanceCache_G;
std::vector<float> mSpeedRates;
std::vector<float> mDirections;
// probabilities of skipping or mapping to a key for each point.
std::vector<hash_map_compat<int, float> > mCharProbabilities;
// 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<ProximityInfoStateUtils::NearKeycodesSet> mNearKeysVector;
+ // 2. Used to calculate mSampledSearchKeysVector
+ std::vector<ProximityInfoStateUtils::NearKeycodesSet> mSampledNearKeysVector;
// 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> mSearchKeysVector;
+ std::vector<ProximityInfoStateUtils::NearKeycodesSet> mSampledSearchKeysVector;
bool mTouchPositionCorrectionEnabled;
int mInputProximities[MAX_PROXIMITY_CHARS_SIZE * MAX_WORD_LENGTH];
int mNormalizedSquaredDistances[MAX_PROXIMITY_CHARS_SIZE * MAX_WORD_LENGTH];
diff --git a/native/jni/src/proximity_info_state_utils.cpp b/native/jni/src/proximity_info_state_utils.cpp
index be6cde17b..dd8f1bc79 100644
--- a/native/jni/src/proximity_info_state_utils.cpp
+++ b/native/jni/src/proximity_info_state_utils.cpp
@@ -47,7 +47,7 @@ namespace latinime {
for (int i = 0; i < inputSize; ++i) {
if (i > 0) {
if (times[i] < times[i - 1]) {
- AKLOGI("Invalid time sequence. %d, %d", times[i], times[i - 1]);
+ AKLOGI("Invalid time sequence. %d, %d", times[i - 1], times[i]);
ASSERT(false);
}
}
@@ -215,15 +215,12 @@ namespace latinime {
const int sampledInputSize, const int lastSavedInputSize,
const std::vector<int> *const sampledInputXs,
const std::vector<int> *const sampledInputYs,
- std::vector<NearKeycodesSet> *nearKeysVector,
- std::vector<NearKeycodesSet> *searchKeysVector,
- std::vector<float> *distanceCache_G) {
- nearKeysVector->resize(sampledInputSize);
- searchKeysVector->resize(sampledInputSize);
- distanceCache_G->resize(sampledInputSize * keyCount);
+ std::vector<NearKeycodesSet> *SampledNearKeysVector,
+ std::vector<float> *SampledDistanceCache_G) {
+ SampledNearKeysVector->resize(sampledInputSize);
+ SampledDistanceCache_G->resize(sampledInputSize * keyCount);
for (int i = lastSavedInputSize; i < sampledInputSize; ++i) {
- (*nearKeysVector)[i].reset();
- (*searchKeysVector)[i].reset();
+ (*SampledNearKeysVector)[i].reset();
static const float NEAR_KEY_NORMALIZED_SQUARED_THRESHOLD = 4.0f;
for (int k = 0; k < keyCount; ++k) {
const int index = i * keyCount + k;
@@ -231,9 +228,9 @@ namespace latinime {
const int y = (*sampledInputYs)[i];
const float normalizedSquaredDistance =
proximityInfo->getNormalizedSquaredDistanceFromCenterFloatG(k, x, y);
- (*distanceCache_G)[index] = normalizedSquaredDistance;
+ (*SampledDistanceCache_G)[index] = normalizedSquaredDistance;
if (normalizedSquaredDistance < NEAR_KEY_NORMALIZED_SQUARED_THRESHOLD) {
- (*nearKeysVector)[i][k] = true;
+ (*SampledNearKeysVector)[i][k] = true;
}
}
}
@@ -638,21 +635,21 @@ namespace latinime {
// This function basically converts from a length to an edit distance. Accordingly, it's obviously
// wrong to compare with mMaxPointToKeyLength.
/* static */ float ProximityInfoStateUtils::getPointToKeyByIdLength(const float maxPointToKeyLength,
- const std::vector<float> *const distanceCache_G, const int keyCount,
+ const std::vector<float> *const SampledDistanceCache_G, const int keyCount,
const int inputIndex, const int keyId, const float scale) {
if (keyId != NOT_AN_INDEX) {
const int index = inputIndex * keyCount + keyId;
- return min((*distanceCache_G)[index] * scale, maxPointToKeyLength);
+ return min((*SampledDistanceCache_G)[index] * scale, maxPointToKeyLength);
}
// If the char is not a key on the keyboard then return the max length.
return static_cast<float>(MAX_POINT_TO_KEY_LENGTH);
}
/* static */ float ProximityInfoStateUtils::getPointToKeyByIdLength(const float maxPointToKeyLength,
- const std::vector<float> *const distanceCache_G, const int keyCount,
+ const std::vector<float> *const SampledDistanceCache_G, const int keyCount,
const int inputIndex, const int keyId) {
- return getPointToKeyByIdLength(maxPointToKeyLength, distanceCache_G, keyCount, inputIndex,
- keyId, 1.0f);
+ return getPointToKeyByIdLength(
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, inputIndex, keyId, 1.0f);
}
// Updates probabilities of aligning to some keys and skipping.
@@ -663,8 +660,8 @@ namespace latinime {
const std::vector<int> *const sampledInputYs,
const std::vector<float> *const sampledSpeedRates,
const std::vector<int> *const sampledLengthCache,
- const std::vector<float> *const distanceCache_G,
- std::vector<NearKeycodesSet> *nearKeysVector,
+ const std::vector<float> *const SampledDistanceCache_G,
+ std::vector<NearKeycodesSet> *SampledNearKeysVector,
std::vector<hash_map_compat<int, float> > *charProbabilities) {
static const float MIN_PROBABILITY = 0.000001f;
static const float MAX_SKIP_PROBABILITY = 0.95f;
@@ -701,9 +698,9 @@ namespace latinime {
float nearestKeyDistance = static_cast<float>(MAX_POINT_TO_KEY_LENGTH);
for (int j = 0; j < keyCount; ++j) {
- if ((*nearKeysVector)[i].test(j)) {
+ if ((*SampledNearKeysVector)[i].test(j)) {
const float distance = getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i, j);
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i, j);
if (distance < nearestKeyDistance) {
nearestKeyDistance = distance;
}
@@ -786,14 +783,14 @@ namespace latinime {
// Summing up probability densities of all near keys.
float sumOfProbabilityDensities = 0.0f;
for (int j = 0; j < keyCount; ++j) {
- if ((*nearKeysVector)[i].test(j)) {
+ if ((*SampledNearKeysVector)[i].test(j)) {
float distance = sqrtf(getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i, j));
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i, j));
if (i == 0 && i != sampledInputSize - 1) {
// For the first point, weighted average of distances from first point and the
// next point to the key is used as a point to key distance.
const float nextDistance = sqrtf(getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i + 1, j));
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i + 1, j));
if (nextDistance < distance) {
// The distance of the first point tends to bigger than continuing
// points because the first touch by the user can be sloppy.
@@ -806,7 +803,7 @@ namespace latinime {
// For the first point, weighted average of distances from last point and
// the previous point to the key is used as a point to key distance.
const float previousDistance = sqrtf(getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i - 1, j));
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i - 1, j));
if (previousDistance < distance) {
// The distance of the last point tends to bigger than continuing points
// because the last touch by the user can be sloppy. So we promote the
@@ -824,14 +821,14 @@ namespace latinime {
// Split the probability of an input point to keys that are close to the input point.
for (int j = 0; j < keyCount; ++j) {
- if ((*nearKeysVector)[i].test(j)) {
+ if ((*SampledNearKeysVector)[i].test(j)) {
float distance = sqrtf(getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i, j));
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i, j));
if (i == 0 && i != sampledInputSize - 1) {
// For the first point, weighted average of distances from the first point and
// the next point to the key is used as a point to key distance.
const float prevDistance = sqrtf(getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i + 1, j));
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i + 1, j));
if (prevDistance < distance) {
distance = (distance + prevDistance * NEXT_DISTANCE_WEIGHT)
/ (1.0f + NEXT_DISTANCE_WEIGHT);
@@ -840,7 +837,7 @@ namespace latinime {
// For the first point, weighted average of distances from last point and
// the previous point to the key is used as a point to key distance.
const float prevDistance = sqrtf(getPointToKeyByIdLength(
- maxPointToKeyLength, distanceCache_G, keyCount, i - 1, j));
+ maxPointToKeyLength, SampledDistanceCache_G, keyCount, i - 1, j));
if (prevDistance < distance) {
distance = (distance + prevDistance * PREV_DISTANCE_WEIGHT)
/ (1.0f + PREV_DISTANCE_WEIGHT);
@@ -906,10 +903,10 @@ namespace latinime {
for (int j = 0; j < keyCount; ++j) {
hash_map_compat<int, float>::iterator it = (*charProbabilities)[i].find(j);
if (it == (*charProbabilities)[i].end()){
- (*nearKeysVector)[i].reset(j);
+ (*SampledNearKeysVector)[i].reset(j);
} else if(it->second < MIN_PROBABILITY) {
// Erases from near keys vector because it has very low probability.
- (*nearKeysVector)[i].reset(j);
+ (*SampledNearKeysVector)[i].reset(j);
(*charProbabilities)[i].erase(j);
} else {
it->second = -logf(it->second);
@@ -919,25 +916,26 @@ namespace latinime {
}
}
-/* static */ void ProximityInfoStateUtils::updateSearchKeysVector(
+/* static */ void ProximityInfoStateUtils::updateSampledSearchKeysVector(
const ProximityInfo *const proximityInfo, const int sampledInputSize,
const int lastSavedInputSize,
const std::vector<int> *const sampledLengthCache,
- const std::vector<NearKeycodesSet> *const nearKeysVector,
- std::vector<NearKeycodesSet> *searchKeysVector) {
+ const std::vector<NearKeycodesSet> *const SampledNearKeysVector,
+ std::vector<NearKeycodesSet> *sampledSearchKeysVector) {
+ sampledSearchKeysVector->resize(sampledInputSize);
const int readForwordLength = static_cast<int>(
hypotf(proximityInfo->getKeyboardWidth(), proximityInfo->getKeyboardHeight())
* ProximityInfoParams::SEARCH_KEY_RADIUS_RATIO);
for (int i = 0; i < sampledInputSize; ++i) {
if (i >= lastSavedInputSize) {
- (*searchKeysVector)[i].reset();
+ (*sampledSearchKeysVector)[i].reset();
}
for (int j = max(i, lastSavedInputSize); j < sampledInputSize; ++j) {
// TODO: Investigate if this is required. This may not fail.
if ((*sampledLengthCache)[j] - (*sampledLengthCache)[i] >= readForwordLength) {
break;
}
- (*searchKeysVector)[i] |= (*nearKeysVector)[j];
+ (*sampledSearchKeysVector)[i] |= (*SampledNearKeysVector)[j];
}
}
}
@@ -985,6 +983,34 @@ namespace latinime {
return true;
}
+/* static */ bool ProximityInfoStateUtils::checkAndReturnIsContinuationPossible(const int inputSize,
+ const int *const xCoordinates, const int *const yCoordinates, const int *const times,
+ const int sampledInputSize, const std::vector<int> *const sampledInputXs,
+ const std::vector<int> *const sampledInputYs,
+ const std::vector<int> *const sampledTimes,
+ const std::vector<int> *const sampledInputIndices) {
+ if (inputSize < sampledInputSize) {
+ return false;
+ }
+ for (int i = 0; i < sampledInputSize; ++i) {
+ const int index = (*sampledInputIndices)[i];
+ if (index >= inputSize) {
+ return false;
+ }
+ if (xCoordinates[index] != (*sampledInputXs)[i]
+ || yCoordinates[index] != (*sampledInputYs)[i]) {
+ return false;
+ }
+ if (!times) {
+ continue;
+ }
+ if (times[index] != (*sampledTimes)[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+
/* static */ void ProximityInfoStateUtils::dump(const bool isGeometric, const int inputSize,
const int *const inputXCoordinates, const int *const inputYCoordinates,
const int sampledInputSize, const std::vector<int> *const sampledInputXs,
diff --git a/native/jni/src/proximity_info_state_utils.h b/native/jni/src/proximity_info_state_utils.h
index b70121ad2..931549016 100644
--- a/native/jni/src/proximity_info_state_utils.h
+++ b/native/jni/src/proximity_info_state_utils.h
@@ -69,29 +69,28 @@ class ProximityInfoStateUtils {
const std::vector<int> *const sampledInputYs,
const std::vector<float> *const sampledSpeedRates,
const std::vector<int> *const sampledLengthCache,
- const std::vector<float> *const distanceCache_G,
- std::vector<NearKeycodesSet> *nearKeysVector,
+ const std::vector<float> *const SampledDistanceCache_G,
+ std::vector<NearKeycodesSet> *SampledNearKeysVector,
std::vector<hash_map_compat<int, float> > *charProbabilities);
- static void updateSearchKeysVector(
+ static void updateSampledSearchKeysVector(
const ProximityInfo *const proximityInfo, const int sampledInputSize,
const int lastSavedInputSize,
const std::vector<int> *const sampledLengthCache,
- const std::vector<NearKeycodesSet> *const nearKeysVector,
- std::vector<NearKeycodesSet> *searchKeysVector);
+ const std::vector<NearKeycodesSet> *const SampledNearKeysVector,
+ std::vector<NearKeycodesSet> *sampledSearchKeysVector);
static float getPointToKeyByIdLength(const float maxPointToKeyLength,
- const std::vector<float> *const distanceCache_G, const int keyCount,
+ const std::vector<float> *const SampledDistanceCache_G, const int keyCount,
const int inputIndex, const int keyId, const float scale);
static float getPointToKeyByIdLength(const float maxPointToKeyLength,
- const std::vector<float> *const distanceCache_G, const int keyCount,
+ const std::vector<float> *const SampledDistanceCache_G, const int keyCount,
const int inputIndex, const int keyId);
static void initGeometricDistanceInfos(
const ProximityInfo *const proximityInfo, const int keyCount,
const int sampledInputSize, const int lastSavedInputSize,
const std::vector<int> *const sampledInputXs,
const std::vector<int> *const sampledInputYs,
- std::vector<NearKeycodesSet> *nearKeysVector,
- std::vector<NearKeycodesSet> *searchKeysVector,
- std::vector<float> *distanceCache_G);
+ std::vector<NearKeycodesSet> *SampledNearKeysVector,
+ std::vector<float> *SampledDistanceCache_G);
static void initPrimaryInputWord(
const int inputSize, const int *const inputProximities, int *primaryInputWord);
static void initNormalizedSquaredDistances(
@@ -108,6 +107,12 @@ class ProximityInfoStateUtils {
const std::vector<int> *const sampledTimes,
const std::vector<float> *const sampledSpeedRates,
const std::vector<int> *const sampledBeelineSpeedPercentiles);
+ static bool checkAndReturnIsContinuationPossible(const int inputSize,
+ const int *const xCoordinates, const int *const yCoordinates, const int *const times,
+ const int sampledInputSize, const std::vector<int> *const sampledInputXs,
+ const std::vector<int> *const sampledInputYs,
+ const std::vector<int> *const sampledTimes,
+ const std::vector<int> *const sampledInputIndices);
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfoStateUtils);