Use priority queue for native string buffer
+1 2
-6 2
Performance
before
==== test finished, terminate logcat =====
(0) 100.34 (0.26%)
(1) 37149.26 (95.30%)
(2) 8.43 (0.02%)
(3) 11.18 (0.03%)
(4) 9.92 (0.03%)
(5) 1330.60 (3.41%)
(6) 250.46 (0.64%)
(20) 12.41 (0.03%)
Total 38982.50 (sum of others 38872.59)
after
==== test finished, terminate logcat =====
(0) 97.65 (0.26%)
(1) 35427.43 (95.32%)
(2) 10.30 (0.03%)
(3) 8.95 (0.02%)
(4) 11.01 (0.03%)
(5) 1224.67 (3.30%)
(6) 243.76 (0.66%)
(20) 40.91 (0.11%)
Total 37167.04 (sum of others 37064.68)
Change-Id: Id4d3b88a9cdef765affc52973aeac951ecc6a8ca
diff --git a/native/src/unigram_dictionary.h b/native/src/unigram_dictionary.h
index 4f4fef2..506ed62 100644
--- a/native/src/unigram_dictionary.h
+++ b/native/src/unigram_dictionary.h
@@ -22,6 +22,7 @@
#include "correction_state.h"
#include "defines.h"
#include "proximity_info.h"
+#include "words_priority_queue.h"
namespace latinime {
@@ -73,18 +74,16 @@
private:
void getWordSuggestions(ProximityInfo *proximityInfo, const int *xcoordinates,
- const int *ycoordinates, const int *codes, const int codesSize,
- unsigned short *outWords, int *frequencies, const int flags);
+ const int *ycoordinates, const int *codes, const int codesSize, const int flags);
bool isDigraph(const int* codes, const int i, const int codesSize) const;
void getWordWithDigraphSuggestionsRec(ProximityInfo *proximityInfo,
const int *xcoordinates, const int* ycoordinates, const int *codesBuffer,
const int codesBufferSize, const int flags, const int* codesSrc, const int codesRemain,
- const int currentDepth, int* codesDest, unsigned short* outWords, int* frequencies);
+ const int currentDepth, int* codesDest);
void initSuggestions(ProximityInfo *proximityInfo, const int *xcoordinates,
- const int *ycoordinates, const int *codes, const int codesSize,
- unsigned short *outWords, int *frequencies);
+ const int *ycoordinates, const int *codes, const int codesSize);
void getSuggestionCandidates(const bool useFullEditDistance);
- bool addWord(unsigned short *word, int length, int frequency);
+ void addWord(unsigned short *word, int length, int frequency);
void getSplitTwoWordsSuggestion(const int inputLength, Correction *correction);
void getMissingSpaceWords(const int inputLength, const int missingSpacePos,
Correction *correction, const bool useFullEditDistance);
@@ -123,8 +122,7 @@
};
static const struct digraph_t { int first; int second; } GERMAN_UMLAUT_DIGRAPHS[];
- int *mFrequencies;
- unsigned short *mOutputChars;
+ WordsPriorityQueue *mWordsPriorityQueue;
ProximityInfo *mProximityInfo;
Correction *mCorrection;
int mInputLength;