aboutsummaryrefslogtreecommitdiffstats
path: root/native/jni/src/unigram_dictionary.cpp
diff options
context:
space:
mode:
authorsatok <satok@google.com>2012-06-14 11:25:50 -0700
committersatok <satok@google.com>2012-06-14 15:57:28 -0700
commit1bc038c5e40bd0fa7a44331a569abe3ae88f0152 (patch)
tree112924a6267b25836b48c01f8cc10d0382f67cd3 /native/jni/src/unigram_dictionary.cpp
parent78573f2e8a7dbf67e16fa4dd531f33cba0df7ff5 (diff)
downloadlatinime-1bc038c5e40bd0fa7a44331a569abe3ae88f0152.tar.gz
latinime-1bc038c5e40bd0fa7a44331a569abe3ae88f0152.tar.xz
latinime-1bc038c5e40bd0fa7a44331a569abe3ae88f0152.zip
Move correction state to stack memory
*Before (0) 13.18 (0.01%) (1) 93025.41 (62.06%) (2) 10.75 (0.01%) (3) 10.50 (0.01%) (4) 117.50 (0.08%) (5) 55678.98 (37.14%) (6) 9.09 (0.01%) (20) 883.84 (0.59%) Total 149898.24 (sum of others 149749.25) *After (0) 17.41 (0.01%) (1) 92673.41 (61.95%) (2) 10.62 (0.01%) (3) 10.37 (0.01%) (4) 120.96 (0.08%) (5) 55741.18 (37.26%) (6) 11.01 (0.01%) (20) 862.72 (0.58%) Total 149595.52 (sum of others 149447.68) Change-Id: Ia5a25a544fc388e4dab1e08d8f78d5117b249cf3
Diffstat (limited to 'native/jni/src/unigram_dictionary.cpp')
-rw-r--r--native/jni/src/unigram_dictionary.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/native/jni/src/unigram_dictionary.cpp b/native/jni/src/unigram_dictionary.cpp
index 27196f493..91b2f92c0 100644
--- a/native/jni/src/unigram_dictionary.cpp
+++ b/native/jni/src/unigram_dictionary.cpp
@@ -170,14 +170,14 @@ void UnigramDictionary::getWordWithDigraphSuggestionsRec(ProximityInfo *proximit
// bigramFilter is a bloom filter for fast rejection: see functions setInFilter and isInFilter
// in bigram_dictionary.cpp
int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo,
- WordsPriorityQueuePool *queuePool, Correction *correction, const int *xcoordinates,
+ WordsPriorityQueuePool *queuePool, const int *xcoordinates,
const int *ycoordinates, const int *codes, const int codesSize,
const std::map<int, int> *bigramMap, const uint8_t *bigramFilter,
const bool useFullEditDistance, unsigned short *outWords, int *frequencies) const {
queuePool->clearAll();
- Correction* masterCorrection = correction;
- correction->resetCorrection();
+ Correction masterCorrection;
+ masterCorrection.resetCorrection();
if (BinaryFormat::REQUIRES_GERMAN_UMLAUT_PROCESSING & FLAGS)
{ // Incrementally tune the word and try all possibilities
int codesBuffer[getCodesBufferSize(codes, codesSize)];
@@ -185,7 +185,7 @@ int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo,
int yCoordinatesBuffer[codesSize];
getWordWithDigraphSuggestionsRec(proximityInfo, xcoordinates, ycoordinates, codesBuffer,
xCoordinatesBuffer, yCoordinatesBuffer, codesSize, bigramMap, bigramFilter,
- useFullEditDistance, codes, codesSize, 0, codesBuffer, masterCorrection,
+ useFullEditDistance, codes, codesSize, 0, codesBuffer, &masterCorrection,
queuePool, GERMAN_UMLAUT_DIGRAPHS,
sizeof(GERMAN_UMLAUT_DIGRAPHS) / sizeof(GERMAN_UMLAUT_DIGRAPHS[0]));
} else if (BinaryFormat::REQUIRES_FRENCH_LIGATURES_PROCESSING & FLAGS) {
@@ -194,28 +194,28 @@ int UnigramDictionary::getSuggestions(ProximityInfo *proximityInfo,
int yCoordinatesBuffer[codesSize];
getWordWithDigraphSuggestionsRec(proximityInfo, xcoordinates, ycoordinates, codesBuffer,
xCoordinatesBuffer, yCoordinatesBuffer, codesSize, bigramMap, bigramFilter,
- useFullEditDistance, codes, codesSize, 0, codesBuffer, masterCorrection,
+ useFullEditDistance, codes, codesSize, 0, codesBuffer, &masterCorrection,
queuePool, FRENCH_LIGATURES_DIGRAPHS,
sizeof(FRENCH_LIGATURES_DIGRAPHS) / sizeof(FRENCH_LIGATURES_DIGRAPHS[0]));
} else { // Normal processing
getWordSuggestions(proximityInfo, xcoordinates, ycoordinates, codes, codesSize,
- bigramMap, bigramFilter, useFullEditDistance, masterCorrection, queuePool);
+ bigramMap, bigramFilter, useFullEditDistance, &masterCorrection, queuePool);
}
PROF_START(20);
if (DEBUG_DICT) {
float ns = queuePool->getMasterQueue()->getHighestNormalizedScore(
- correction->getPrimaryInputWord(), codesSize, 0, 0, 0);
+ masterCorrection.getPrimaryInputWord(), codesSize, 0, 0, 0);
ns += 0;
AKLOGI("Max normalized score = %f", ns);
}
const int suggestedWordsCount =
queuePool->getMasterQueue()->outputSuggestions(
- correction->getPrimaryInputWord(), codesSize, frequencies, outWords);
+ masterCorrection.getPrimaryInputWord(), codesSize, frequencies, outWords);
if (DEBUG_DICT) {
float ns = queuePool->getMasterQueue()->getHighestNormalizedScore(
- correction->getPrimaryInputWord(), codesSize, 0, 0, 0);
+ masterCorrection.getPrimaryInputWord(), codesSize, 0, 0, 0);
ns += 0;
AKLOGI("Returning %d words", suggestedWordsCount);
/// Print the returned words