aboutsummaryrefslogtreecommitdiffstats
path: root/native/jni/src/proximity_info_state_utils.cpp
diff options
context:
space:
mode:
authorSatoshi Kataoka <satok@google.com>2013-02-08 04:46:03 +0900
committerSatoshi Kataoka <satok@google.com>2013-02-14 17:04:34 +0900
commite5cdd21102e4e49b18c696261a084783eb6d7e7a (patch)
tree3373ee3d3f5c9c606941c6f217a8959e335e73b1 /native/jni/src/proximity_info_state_utils.cpp
parentafe889a83d43afe23d22d28a443b051bb115f023 (diff)
downloadlatinime-e5cdd21102e4e49b18c696261a084783eb6d7e7a.tar.gz
latinime-e5cdd21102e4e49b18c696261a084783eb6d7e7a.tar.xz
latinime-e5cdd21102e4e49b18c696261a084783eb6d7e7a.zip
clean up seach key vector
Bug: 8197301 Change-Id: I6a67d2914bd44b3ceca655adcd65c9c42796b026
Diffstat (limited to 'native/jni/src/proximity_info_state_utils.cpp')
-rw-r--r--native/jni/src/proximity_info_state_utils.cpp48
1 files changed, 32 insertions, 16 deletions
diff --git a/native/jni/src/proximity_info_state_utils.cpp b/native/jni/src/proximity_info_state_utils.cpp
index f9b69d264..2bf327fcc 100644
--- a/native/jni/src/proximity_info_state_utils.cpp
+++ b/native/jni/src/proximity_info_state_utils.cpp
@@ -224,13 +224,13 @@ namespace latinime {
const ProximityInfo *const proximityInfo, const int sampledInputSize,
const int lastSavedInputSize, const std::vector<int> *const sampledInputXs,
const std::vector<int> *const sampledInputYs,
- std::vector<NearKeycodesSet> *SampledNearKeysVector,
+ std::vector<NearKeycodesSet> *SampledNearKeySets,
std::vector<float> *SampledDistanceCache_G) {
- SampledNearKeysVector->resize(sampledInputSize);
+ SampledNearKeySets->resize(sampledInputSize);
const int keyCount = proximityInfo->getKeyCount();
SampledDistanceCache_G->resize(sampledInputSize * keyCount);
for (int i = lastSavedInputSize; i < sampledInputSize; ++i) {
- (*SampledNearKeysVector)[i].reset();
+ (*SampledNearKeySets)[i].reset();
for (int k = 0; k < keyCount; ++k) {
const int index = i * keyCount + k;
const int x = (*sampledInputXs)[i];
@@ -240,7 +240,7 @@ namespace latinime {
(*SampledDistanceCache_G)[index] = normalizedSquaredDistance;
if (normalizedSquaredDistance
< ProximityInfoParams::NEAR_KEY_NORMALIZED_SQUARED_THRESHOLD) {
- (*SampledNearKeysVector)[i][k] = true;
+ (*SampledNearKeySets)[i][k] = true;
}
}
}
@@ -664,7 +664,7 @@ namespace latinime {
const std::vector<float> *const sampledSpeedRates,
const std::vector<int> *const sampledLengthCache,
const std::vector<float> *const SampledDistanceCache_G,
- std::vector<NearKeycodesSet> *SampledNearKeysVector,
+ std::vector<NearKeycodesSet> *SampledNearKeySets,
std::vector<hash_map_compat<int, float> > *charProbabilities) {
charProbabilities->resize(sampledInputSize);
// Calculates probabilities of using a point as a correlated point with the character
@@ -680,7 +680,7 @@ namespace latinime {
float nearestKeyDistance = static_cast<float>(MAX_POINT_TO_KEY_LENGTH);
for (int j = 0; j < keyCount; ++j) {
- if ((*SampledNearKeysVector)[i].test(j)) {
+ if ((*SampledNearKeySets)[i].test(j)) {
const float distance = getPointToKeyByIdLength(
maxPointToKeyLength, SampledDistanceCache_G, keyCount, i, j);
if (distance < nearestKeyDistance) {
@@ -761,7 +761,7 @@ namespace latinime {
// Summing up probability densities of all near keys.
float sumOfProbabilityDensities = 0.0f;
for (int j = 0; j < keyCount; ++j) {
- if ((*SampledNearKeysVector)[i].test(j)) {
+ if ((*SampledNearKeySets)[i].test(j)) {
float distance = sqrtf(getPointToKeyByIdLength(
maxPointToKeyLength, SampledDistanceCache_G, keyCount, i, j));
if (i == 0 && i != sampledInputSize - 1) {
@@ -801,7 +801,7 @@ 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 ((*SampledNearKeysVector)[i].test(j)) {
+ if ((*SampledNearKeySets)[i].test(j)) {
float distance = sqrtf(getPointToKeyByIdLength(
maxPointToKeyLength, SampledDistanceCache_G, keyCount, i, j));
if (i == 0 && i != sampledInputSize - 1) {
@@ -885,10 +885,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()){
- (*SampledNearKeysVector)[i].reset(j);
+ (*SampledNearKeySets)[i].reset(j);
} else if(it->second < ProximityInfoParams::MIN_PROBABILITY) {
// Erases from near keys vector because it has very low probability.
- (*SampledNearKeysVector)[i].reset(j);
+ (*SampledNearKeySets)[i].reset(j);
(*charProbabilities)[i].erase(j);
} else {
it->second = -logf(it->second);
@@ -898,26 +898,42 @@ namespace latinime {
}
}
-/* static */ void ProximityInfoStateUtils::updateSampledSearchKeysVector(
+/* static */ void ProximityInfoStateUtils::updateSampledSearchKeySets(
const ProximityInfo *const proximityInfo, const int sampledInputSize,
const int lastSavedInputSize,
const std::vector<int> *const sampledLengthCache,
- const std::vector<NearKeycodesSet> *const SampledNearKeysVector,
- std::vector<NearKeycodesSet> *sampledSearchKeysVector) {
- sampledSearchKeysVector->resize(sampledInputSize);
+ const std::vector<NearKeycodesSet> *const SampledNearKeySets,
+ std::vector<NearKeycodesSet> *sampledSearchKeySets,
+ std::vector<std::vector<int> > *sampledSearchKeyVectors) {
+ sampledSearchKeySets->resize(sampledInputSize);
+ sampledSearchKeyVectors->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) {
- (*sampledSearchKeysVector)[i].reset();
+ (*sampledSearchKeySets)[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;
}
- (*sampledSearchKeysVector)[i] |= (*SampledNearKeysVector)[j];
+ (*sampledSearchKeySets)[i] |= (*SampledNearKeySets)[j];
+ }
+ }
+ const int keyCount = proximityInfo->getKeyCount();
+ for (int i = 0; i < sampledInputSize; ++i) {
+ std::vector<int> *searchKeyVector = &(*sampledSearchKeyVectors)[i];
+ searchKeyVector->clear();
+ for (int j = 0; j < keyCount; ++j) {
+ if ((*sampledSearchKeySets)[i].test(j)) {
+ const int keyCodePoint = proximityInfo->getCodePointOf(j);
+ if (std::find(searchKeyVector->begin(), searchKeyVector->end(), keyCodePoint)
+ == searchKeyVector->end()) {
+ searchKeyVector->push_back(keyCodePoint);
+ }
+ }
}
}
}