diff options
author | 2012-06-14 11:25:50 -0700 | |
---|---|---|
committer | 2012-06-14 15:57:28 -0700 | |
commit | 1bc038c5e40bd0fa7a44331a569abe3ae88f0152 (patch) | |
tree | 112924a6267b25836b48c01f8cc10d0382f67cd3 /native/jni/src/unigram_dictionary.cpp | |
parent | 78573f2e8a7dbf67e16fa4dd531f33cba0df7ff5 (diff) | |
download | latinime-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.cpp | 18 |
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 |