Loading native/src/defines.h +1 −0 Original line number Diff line number Diff line Loading @@ -205,6 +205,7 @@ static void dumpWord(const unsigned short* word, const int length) { // Word limit for sub queues used in WordsPriorityQueuePool. Sub queues are temporary queues used // for better performance. #define SUB_QUEUE_MAX_WORDS 5 #define SUB_QUEUE_MAX_COUNT 10 #define MAX_DEPTH_MULTIPLIER 3 Loading native/src/words_priority_queue.h +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ class WordsPriorityQueue { mSuggestedWords[i].mUsed = false; } } ~WordsPriorityQueue() { delete[] mSuggestedWords; } Loading native/src/words_priority_queue_pool.h +29 −12 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ #ifndef LATINIME_WORDS_PRIORITY_QUEUE_POOL_H #define LATINIME_WORDS_PRIORITY_QUEUE_POOL_H #include <assert.h> #include <new> #include "words_priority_queue.h" namespace latinime { Loading @@ -24,30 +26,45 @@ namespace latinime { class WordsPriorityQueuePool { public: WordsPriorityQueuePool(int mainQueueMaxWords, int subQueueMaxWords, int maxWordLength) { mMasterQueue = new WordsPriorityQueue(mainQueueMaxWords, maxWordLength); mSubQueue1 = new WordsPriorityQueue(subQueueMaxWords, maxWordLength); mSubQueue2 = new WordsPriorityQueue(subQueueMaxWords, maxWordLength); mMasterQueue = new(mMasterQueueBuf) WordsPriorityQueue(mainQueueMaxWords, maxWordLength); for (int i = 0, subQueueBufOffset = 0; i < SUB_QUEUE_MAX_COUNT; ++i, subQueueBufOffset += sizeof(WordsPriorityQueue)) { mSubQueues1[i] = new(mSubQueueBuf1 + subQueueBufOffset) WordsPriorityQueue(subQueueMaxWords, maxWordLength); mSubQueues2[i] = new(mSubQueueBuf2 + subQueueBufOffset) WordsPriorityQueue(subQueueMaxWords, maxWordLength); } } ~WordsPriorityQueuePool() { delete mMasterQueue; virtual ~WordsPriorityQueuePool() { } WordsPriorityQueue* getMasterQueue() { return mMasterQueue; } // TODO: Come up with more generic pool WordsPriorityQueue* getSubQueue1() { return mSubQueue1; WordsPriorityQueue* getSubQueue1(const int id) { if (DEBUG_WORDS_PRIORITY_QUEUE) { assert(id >= 0 && id < SUB_QUEUE_MAX_COUNT); } return mSubQueues1[id]; } WordsPriorityQueue* getSubQueue2(const int id) { if (DEBUG_WORDS_PRIORITY_QUEUE) { assert(id >= 0 && id < SUB_QUEUE_MAX_COUNT); } WordsPriorityQueue* getSubQueue2() { return mSubQueue2; return mSubQueues2[id]; } private: WordsPriorityQueue* mMasterQueue; WordsPriorityQueue *mSubQueue1; WordsPriorityQueue *mSubQueue2; WordsPriorityQueue* mSubQueues1[SUB_QUEUE_MAX_COUNT]; WordsPriorityQueue* mSubQueues2[SUB_QUEUE_MAX_COUNT]; char mMasterQueueBuf[sizeof(WordsPriorityQueue)]; char mSubQueueBuf1[SUB_QUEUE_MAX_COUNT * sizeof(WordsPriorityQueue)]; char mSubQueueBuf2[SUB_QUEUE_MAX_COUNT * sizeof(WordsPriorityQueue)]; }; } Loading Loading
native/src/defines.h +1 −0 Original line number Diff line number Diff line Loading @@ -205,6 +205,7 @@ static void dumpWord(const unsigned short* word, const int length) { // Word limit for sub queues used in WordsPriorityQueuePool. Sub queues are temporary queues used // for better performance. #define SUB_QUEUE_MAX_WORDS 5 #define SUB_QUEUE_MAX_COUNT 10 #define MAX_DEPTH_MULTIPLIER 3 Loading
native/src/words_priority_queue.h +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ class WordsPriorityQueue { mSuggestedWords[i].mUsed = false; } } ~WordsPriorityQueue() { delete[] mSuggestedWords; } Loading
native/src/words_priority_queue_pool.h +29 −12 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ #ifndef LATINIME_WORDS_PRIORITY_QUEUE_POOL_H #define LATINIME_WORDS_PRIORITY_QUEUE_POOL_H #include <assert.h> #include <new> #include "words_priority_queue.h" namespace latinime { Loading @@ -24,30 +26,45 @@ namespace latinime { class WordsPriorityQueuePool { public: WordsPriorityQueuePool(int mainQueueMaxWords, int subQueueMaxWords, int maxWordLength) { mMasterQueue = new WordsPriorityQueue(mainQueueMaxWords, maxWordLength); mSubQueue1 = new WordsPriorityQueue(subQueueMaxWords, maxWordLength); mSubQueue2 = new WordsPriorityQueue(subQueueMaxWords, maxWordLength); mMasterQueue = new(mMasterQueueBuf) WordsPriorityQueue(mainQueueMaxWords, maxWordLength); for (int i = 0, subQueueBufOffset = 0; i < SUB_QUEUE_MAX_COUNT; ++i, subQueueBufOffset += sizeof(WordsPriorityQueue)) { mSubQueues1[i] = new(mSubQueueBuf1 + subQueueBufOffset) WordsPriorityQueue(subQueueMaxWords, maxWordLength); mSubQueues2[i] = new(mSubQueueBuf2 + subQueueBufOffset) WordsPriorityQueue(subQueueMaxWords, maxWordLength); } } ~WordsPriorityQueuePool() { delete mMasterQueue; virtual ~WordsPriorityQueuePool() { } WordsPriorityQueue* getMasterQueue() { return mMasterQueue; } // TODO: Come up with more generic pool WordsPriorityQueue* getSubQueue1() { return mSubQueue1; WordsPriorityQueue* getSubQueue1(const int id) { if (DEBUG_WORDS_PRIORITY_QUEUE) { assert(id >= 0 && id < SUB_QUEUE_MAX_COUNT); } return mSubQueues1[id]; } WordsPriorityQueue* getSubQueue2(const int id) { if (DEBUG_WORDS_PRIORITY_QUEUE) { assert(id >= 0 && id < SUB_QUEUE_MAX_COUNT); } WordsPriorityQueue* getSubQueue2() { return mSubQueue2; return mSubQueues2[id]; } private: WordsPriorityQueue* mMasterQueue; WordsPriorityQueue *mSubQueue1; WordsPriorityQueue *mSubQueue2; WordsPriorityQueue* mSubQueues1[SUB_QUEUE_MAX_COUNT]; WordsPriorityQueue* mSubQueues2[SUB_QUEUE_MAX_COUNT]; char mMasterQueueBuf[sizeof(WordsPriorityQueue)]; char mSubQueueBuf1[SUB_QUEUE_MAX_COUNT * sizeof(WordsPriorityQueue)]; char mSubQueueBuf2[SUB_QUEUE_MAX_COUNT * sizeof(WordsPriorityQueue)]; }; } Loading