Loading native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +15 −15 Original line number Diff line number Diff line Loading @@ -242,15 +242,15 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, env->GetFloatArrayRegion(inOutWeightOfLangModelVsSpatialModel, 0, 1 /* len */, &weightOfLangModelVsSpatialModel); SuggestionResults suggestionResults(MAX_RESULTS); const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, prevWordCount); if (givenSuggestOptions.isGesture() || inputSize > 0) { // TODO: Use SuggestionResults to return suggestions. dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates, times, pointerIds, inputCodePoints, inputSize, &prevWordsInfo, times, pointerIds, inputCodePoints, inputSize, &ngramContext, &givenSuggestOptions, weightOfLangModelVsSpatialModel, &suggestionResults); } else { dictionary->getPredictions(&prevWordsInfo, &suggestionResults); dictionary->getPredictions(&ngramContext, &suggestionResults); } if (DEBUG_DICT) { suggestionResults.dumpSuggestions(); Loading Loading @@ -289,10 +289,10 @@ static jint latinime_BinaryDictionary_getNgramProbability(JNIEnv *env, jclass cl const jsize wordLength = env->GetArrayLength(word); int wordCodePoints[wordLength]; env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints); const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); return dictionary->getNgramProbability(&prevWordsInfo, return dictionary->getNgramProbability(&ngramContext, CodePointArrayView(wordCodePoints, wordLength)); } Loading Loading @@ -402,7 +402,7 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j if (!dictionary) { return false; } const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); jsize wordLength = env->GetArrayLength(word); Loading @@ -411,7 +411,7 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j // Use 1 for count to indicate the ngram has inputted. const NgramProperty ngramProperty(CodePointArrayView(wordCodePoints, wordLength).toVector(), probability, HistoricalInfo(timestamp, 0 /* level */, 1 /* count */)); return dictionary->addNgramEntry(&prevWordsInfo, &ngramProperty); return dictionary->addNgramEntry(&ngramContext, &ngramProperty); } static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz, jlong dict, Loading @@ -421,13 +421,13 @@ static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz if (!dictionary) { return false; } const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); jsize codePointCount = env->GetArrayLength(word); int wordCodePoints[codePointCount]; env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints); return dictionary->removeNgramEntry(&prevWordsInfo, return dictionary->removeNgramEntry(&ngramContext, CodePointArrayView(wordCodePoints, codePointCount)); } Loading @@ -439,14 +439,14 @@ static bool latinime_BinaryDictionary_updateEntriesForWordWithNgramContext(JNIEn if (!dictionary) { return false; } const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); jsize codePointCount = env->GetArrayLength(word); int wordCodePoints[codePointCount]; env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints); const HistoricalInfo historicalInfo(timestamp, 0 /* level */, count); return dictionary->updateEntriesForWordWithNgramContext(&prevWordsInfo, return dictionary->updateEntriesForWordWithNgramContext(&ngramContext, CodePointArrayView(wordCodePoints, codePointCount), isValidWord == JNI_TRUE, historicalInfo); } Loading Loading @@ -529,9 +529,9 @@ static int latinime_BinaryDictionary_addMultipleDictionaryEntries(JNIEnv *env, j const NgramProperty ngramProperty( CodePointArrayView(word1CodePoints, word1Length).toVector(), bigramProbability, HistoricalInfo(timestamp, 0 /* level */, 1 /* count */)); const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, const NgramContext ngramContext(word0CodePoints, word0Length, false /* isBeginningOfSentence */); dictionary->addNgramEntry(&prevWordsInfo, &ngramProperty); dictionary->addNgramEntry(&ngramContext, &ngramProperty); } if (dictionary->needsToRunGC(true /* mindsBlockByGC */)) { return i + 1; Loading Loading @@ -641,10 +641,10 @@ static bool latinime_BinaryDictionary_migrateNative(JNIEnv *env, jclass clazz, j return false; } } const PrevWordsInfo prevWordsInfo(wordCodePoints, wordCodePointCount, const NgramContext ngramContext(wordCodePoints, wordCodePointCount, wordProperty.getUnigramProperty()->representsBeginningOfSentence()); for (const NgramProperty &ngramProperty : *wordProperty.getNgramProperties()) { if (!dictionaryStructureWithBufferPolicy->addNgramEntry(&prevWordsInfo, if (!dictionaryStructureWithBufferPolicy->addNgramEntry(&ngramContext, &ngramProperty)) { LogUtils::logToJava(env, "Cannot add ngram to the new dict."); return false; Loading native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -40,14 +40,14 @@ static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong tra } Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary); if (!previousWord) { PrevWordsInfo prevWordsInfo; ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); NgramContext emptyNgramContext; ts->init(dict, &emptyNgramContext, 0 /* suggestOptions */); return; } int prevWord[previousWordLength]; env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord); PrevWordsInfo prevWordsInfo(prevWord, previousWordLength, false /* isStartOfSentence */); ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); NgramContext ngramContext(prevWord, previousWordLength, false /* isStartOfSentence */); ts->init(dict, &ngramContext, 0 /* suggestOptions */); } static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) { Loading native/jni/src/suggest/core/dictionary/dictionary.cpp +19 −19 Original line number Diff line number Diff line Loading @@ -46,11 +46,11 @@ Dictionary::Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::Structu void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, const PrevWordsInfo *const prevWordsInfo, int inputSize, const NgramContext *const ngramContext, const SuggestOptions *const suggestOptions, const float weightOfLangModelVsSpatialModel, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); traverseSession->init(this, prevWordsInfo, suggestOptions); traverseSession->init(this, ngramContext, suggestOptions); const auto &suggest = suggestOptions->isGesture() ? mGestureSuggest : mTypingSuggest; suggest->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, Loading @@ -58,10 +58,10 @@ void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession } Dictionary::NgramListenerForPrediction::NgramListenerForPrediction( const PrevWordsInfo *const prevWordsInfo, const WordIdArrayView prevWordIds, const NgramContext *const ngramContext, const WordIdArrayView prevWordIds, SuggestionResults *const suggestionResults, const DictionaryStructureWithBufferPolicy *const dictStructurePolicy) : mPrevWordsInfo(prevWordsInfo), mPrevWordIds(prevWordIds), : mNgramContext(ngramContext), mPrevWordIds(prevWordIds), mSuggestionResults(suggestionResults), mDictStructurePolicy(dictStructurePolicy) {} void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbability, Loading @@ -69,7 +69,7 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi if (targetWordId == NOT_A_WORD_ID) { return; } if (mPrevWordsInfo->isNthPrevWordBeginningOfSentence(1 /* n */) if (mNgramContext->isNthPrevWordBeginningOfSentence(1 /* n */) && ngramProbability == NOT_A_PROBABILITY) { return; } Loading @@ -85,20 +85,20 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi wordAttributes.getProbability()); } void Dictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo, void Dictionary::getPredictions(const NgramContext *const ngramContext, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray; const WordIdArrayView prevWordIds = prevWordsInfo->getPrevWordIds( const WordIdArrayView prevWordIds = ngramContext->getPrevWordIds( mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray, true /* tryLowerCaseSearch */); NgramListenerForPrediction listener(prevWordsInfo, prevWordIds, outSuggestionResults, NgramListenerForPrediction listener(ngramContext, prevWordIds, outSuggestionResults, mDictionaryStructureWithBufferPolicy.get()); mDictionaryStructureWithBufferPolicy->iterateNgramEntries(prevWordIds, &listener); } int Dictionary::getProbability(const CodePointArrayView codePoints) const { return getNgramProbability(nullptr /* prevWordsInfo */, codePoints); return getNgramProbability(nullptr /* ngramContext */, codePoints); } int Dictionary::getMaxProbabilityOfExactMatches(const CodePointArrayView codePoints) const { Loading @@ -107,18 +107,18 @@ int Dictionary::getMaxProbabilityOfExactMatches(const CodePointArrayView codePoi mDictionaryStructureWithBufferPolicy.get(), codePoints); } int Dictionary::getNgramProbability(const PrevWordsInfo *const prevWordsInfo, int Dictionary::getNgramProbability(const NgramContext *const ngramContext, const CodePointArrayView codePoints) const { TimeKeeper::setCurrentTime(); const int wordId = mDictionaryStructureWithBufferPolicy->getWordId(codePoints, false /* forceLowerCaseSearch */); if (wordId == NOT_A_WORD_ID) return NOT_A_PROBABILITY; if (!prevWordsInfo) { if (!ngramContext) { return getDictionaryStructurePolicy()->getProbabilityOfWord(WordIdArrayView(), wordId); } WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray; const WordIdArrayView prevWordIds = prevWordsInfo->getPrevWordIds (mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray, const WordIdArrayView prevWordIds = ngramContext->getPrevWordIds( mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray, true /* tryLowerCaseSearch */); return getDictionaryStructurePolicy()->getProbabilityOfWord(prevWordIds, wordId); } Loading @@ -140,23 +140,23 @@ bool Dictionary::removeUnigramEntry(const CodePointArrayView codePoints) { return mDictionaryStructureWithBufferPolicy->removeUnigramEntry(codePoints); } bool Dictionary::addNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool Dictionary::addNgramEntry(const NgramContext *const ngramContext, const NgramProperty *const ngramProperty) { TimeKeeper::setCurrentTime(); return mDictionaryStructureWithBufferPolicy->addNgramEntry(prevWordsInfo, ngramProperty); return mDictionaryStructureWithBufferPolicy->addNgramEntry(ngramContext, ngramProperty); } bool Dictionary::removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool Dictionary::removeNgramEntry(const NgramContext *const ngramContext, const CodePointArrayView codePoints) { TimeKeeper::setCurrentTime(); return mDictionaryStructureWithBufferPolicy->removeNgramEntry(prevWordsInfo, codePoints); return mDictionaryStructureWithBufferPolicy->removeNgramEntry(ngramContext, codePoints); } bool Dictionary::updateEntriesForWordWithNgramContext(const PrevWordsInfo *const prevWordsInfo, bool Dictionary::updateEntriesForWordWithNgramContext(const NgramContext *const ngramContext, const CodePointArrayView codePoints, const bool isValidWord, const HistoricalInfo historicalInfo) { TimeKeeper::setCurrentTime(); return mDictionaryStructureWithBufferPolicy->updateEntriesForWordWithNgramContext(prevWordsInfo, return mDictionaryStructureWithBufferPolicy->updateEntriesForWordWithNgramContext(ngramContext, codePoints, isValidWord, historicalInfo); } Loading native/jni/src/suggest/core/dictionary/dictionary.h +9 −9 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ namespace latinime { class DictionaryStructureWithBufferPolicy; class DicTraverseSession; class PrevWordsInfo; class NgramContext; class ProximityInfo; class SuggestionResults; class SuggestOptions; Loading Loading @@ -66,18 +66,18 @@ class Dictionary { void getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, const PrevWordsInfo *const prevWordsInfo, int inputSize, const NgramContext *const ngramContext, const SuggestOptions *const suggestOptions, const float weightOfLangModelVsSpatialModel, SuggestionResults *const outSuggestionResults) const; void getPredictions(const PrevWordsInfo *const prevWordsInfo, void getPredictions(const NgramContext *const ngramContext, SuggestionResults *const outSuggestionResults) const; int getProbability(const CodePointArrayView codePoints) const; int getMaxProbabilityOfExactMatches(const CodePointArrayView codePoints) const; int getNgramProbability(const PrevWordsInfo *const prevWordsInfo, int getNgramProbability(const NgramContext *const ngramContext, const CodePointArrayView codePoints) const; bool addUnigramEntry(const CodePointArrayView codePoints, Loading @@ -85,13 +85,13 @@ class Dictionary { bool removeUnigramEntry(const CodePointArrayView codePoints); bool addNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool addNgramEntry(const NgramContext *const ngramContext, const NgramProperty *const ngramProperty); bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool removeNgramEntry(const NgramContext *const ngramContext, const CodePointArrayView codePoints); bool updateEntriesForWordWithNgramContext(const PrevWordsInfo *const prevWordsInfo, bool updateEntriesForWordWithNgramContext(const NgramContext *const ngramContext, const CodePointArrayView codePoints, const bool isValidWord, const HistoricalInfo historicalInfo); Loading Loading @@ -123,7 +123,7 @@ class Dictionary { class NgramListenerForPrediction : public NgramListener { public: NgramListenerForPrediction(const PrevWordsInfo *const prevWordsInfo, NgramListenerForPrediction(const NgramContext *const ngramContext, const WordIdArrayView prevWordIds, SuggestionResults *const suggestionResults, const DictionaryStructureWithBufferPolicy *const dictStructurePolicy); virtual void onVisitEntry(const int ngramProbability, const int targetWordId); Loading @@ -131,7 +131,7 @@ class Dictionary { private: DISALLOW_IMPLICIT_CONSTRUCTORS(NgramListenerForPrediction); const PrevWordsInfo *const mPrevWordsInfo; const NgramContext *const mNgramContext; const WordIdArrayView mPrevWordIds; SuggestionResults *const mSuggestionResults; const DictionaryStructureWithBufferPolicy *const mDictStructurePolicy; Loading native/jni/src/suggest/core/dictionary/dictionary_utils.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -33,10 +33,10 @@ namespace latinime { std::vector<DicNode> current; std::vector<DicNode> next; // No prev words information. PrevWordsInfo emptyPrevWordsInfo; // No ngram context. NgramContext emptyNgramContext; WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray; const WordIdArrayView prevWordIds = emptyPrevWordsInfo.getPrevWordIds( const WordIdArrayView prevWordIds = emptyNgramContext.getPrevWordIds( dictionaryStructurePolicy, &prevWordIdArray, false /* tryLowerCaseSearch */); current.emplace_back(); DicNodeUtils::initAsRoot(dictionaryStructurePolicy, prevWordIds, ¤t.front()); Loading Loading
native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +15 −15 Original line number Diff line number Diff line Loading @@ -242,15 +242,15 @@ static void latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, env->GetFloatArrayRegion(inOutWeightOfLangModelVsSpatialModel, 0, 1 /* len */, &weightOfLangModelVsSpatialModel); SuggestionResults suggestionResults(MAX_RESULTS); const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, prevWordCount); if (givenSuggestOptions.isGesture() || inputSize > 0) { // TODO: Use SuggestionResults to return suggestions. dictionary->getSuggestions(pInfo, traverseSession, xCoordinates, yCoordinates, times, pointerIds, inputCodePoints, inputSize, &prevWordsInfo, times, pointerIds, inputCodePoints, inputSize, &ngramContext, &givenSuggestOptions, weightOfLangModelVsSpatialModel, &suggestionResults); } else { dictionary->getPredictions(&prevWordsInfo, &suggestionResults); dictionary->getPredictions(&ngramContext, &suggestionResults); } if (DEBUG_DICT) { suggestionResults.dumpSuggestions(); Loading Loading @@ -289,10 +289,10 @@ static jint latinime_BinaryDictionary_getNgramProbability(JNIEnv *env, jclass cl const jsize wordLength = env->GetArrayLength(word); int wordCodePoints[wordLength]; env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints); const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); return dictionary->getNgramProbability(&prevWordsInfo, return dictionary->getNgramProbability(&ngramContext, CodePointArrayView(wordCodePoints, wordLength)); } Loading Loading @@ -402,7 +402,7 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j if (!dictionary) { return false; } const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); jsize wordLength = env->GetArrayLength(word); Loading @@ -411,7 +411,7 @@ static bool latinime_BinaryDictionary_addNgramEntry(JNIEnv *env, jclass clazz, j // Use 1 for count to indicate the ngram has inputted. const NgramProperty ngramProperty(CodePointArrayView(wordCodePoints, wordLength).toVector(), probability, HistoricalInfo(timestamp, 0 /* level */, 1 /* count */)); return dictionary->addNgramEntry(&prevWordsInfo, &ngramProperty); return dictionary->addNgramEntry(&ngramContext, &ngramProperty); } static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz, jlong dict, Loading @@ -421,13 +421,13 @@ static bool latinime_BinaryDictionary_removeNgramEntry(JNIEnv *env, jclass clazz if (!dictionary) { return false; } const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); jsize codePointCount = env->GetArrayLength(word); int wordCodePoints[codePointCount]; env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints); return dictionary->removeNgramEntry(&prevWordsInfo, return dictionary->removeNgramEntry(&ngramContext, CodePointArrayView(wordCodePoints, codePointCount)); } Loading @@ -439,14 +439,14 @@ static bool latinime_BinaryDictionary_updateEntriesForWordWithNgramContext(JNIEn if (!dictionary) { return false; } const PrevWordsInfo prevWordsInfo = JniDataUtils::constructPrevWordsInfo(env, const NgramContext ngramContext = JniDataUtils::constructNgramContext(env, prevWordCodePointArrays, isBeginningOfSentenceArray, env->GetArrayLength(prevWordCodePointArrays)); jsize codePointCount = env->GetArrayLength(word); int wordCodePoints[codePointCount]; env->GetIntArrayRegion(word, 0, codePointCount, wordCodePoints); const HistoricalInfo historicalInfo(timestamp, 0 /* level */, count); return dictionary->updateEntriesForWordWithNgramContext(&prevWordsInfo, return dictionary->updateEntriesForWordWithNgramContext(&ngramContext, CodePointArrayView(wordCodePoints, codePointCount), isValidWord == JNI_TRUE, historicalInfo); } Loading Loading @@ -529,9 +529,9 @@ static int latinime_BinaryDictionary_addMultipleDictionaryEntries(JNIEnv *env, j const NgramProperty ngramProperty( CodePointArrayView(word1CodePoints, word1Length).toVector(), bigramProbability, HistoricalInfo(timestamp, 0 /* level */, 1 /* count */)); const PrevWordsInfo prevWordsInfo(word0CodePoints, word0Length, const NgramContext ngramContext(word0CodePoints, word0Length, false /* isBeginningOfSentence */); dictionary->addNgramEntry(&prevWordsInfo, &ngramProperty); dictionary->addNgramEntry(&ngramContext, &ngramProperty); } if (dictionary->needsToRunGC(true /* mindsBlockByGC */)) { return i + 1; Loading Loading @@ -641,10 +641,10 @@ static bool latinime_BinaryDictionary_migrateNative(JNIEnv *env, jclass clazz, j return false; } } const PrevWordsInfo prevWordsInfo(wordCodePoints, wordCodePointCount, const NgramContext ngramContext(wordCodePoints, wordCodePointCount, wordProperty.getUnigramProperty()->representsBeginningOfSentence()); for (const NgramProperty &ngramProperty : *wordProperty.getNgramProperties()) { if (!dictionaryStructureWithBufferPolicy->addNgramEntry(&prevWordsInfo, if (!dictionaryStructureWithBufferPolicy->addNgramEntry(&ngramContext, &ngramProperty)) { LogUtils::logToJava(env, "Cannot add ngram to the new dict."); return false; Loading
native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -40,14 +40,14 @@ static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong tra } Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary); if (!previousWord) { PrevWordsInfo prevWordsInfo; ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); NgramContext emptyNgramContext; ts->init(dict, &emptyNgramContext, 0 /* suggestOptions */); return; } int prevWord[previousWordLength]; env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord); PrevWordsInfo prevWordsInfo(prevWord, previousWordLength, false /* isStartOfSentence */); ts->init(dict, &prevWordsInfo, 0 /* suggestOptions */); NgramContext ngramContext(prevWord, previousWordLength, false /* isStartOfSentence */); ts->init(dict, &ngramContext, 0 /* suggestOptions */); } static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) { Loading
native/jni/src/suggest/core/dictionary/dictionary.cpp +19 −19 Original line number Diff line number Diff line Loading @@ -46,11 +46,11 @@ Dictionary::Dictionary(JNIEnv *env, DictionaryStructureWithBufferPolicy::Structu void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, const PrevWordsInfo *const prevWordsInfo, int inputSize, const NgramContext *const ngramContext, const SuggestOptions *const suggestOptions, const float weightOfLangModelVsSpatialModel, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); traverseSession->init(this, prevWordsInfo, suggestOptions); traverseSession->init(this, ngramContext, suggestOptions); const auto &suggest = suggestOptions->isGesture() ? mGestureSuggest : mTypingSuggest; suggest->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, Loading @@ -58,10 +58,10 @@ void Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession } Dictionary::NgramListenerForPrediction::NgramListenerForPrediction( const PrevWordsInfo *const prevWordsInfo, const WordIdArrayView prevWordIds, const NgramContext *const ngramContext, const WordIdArrayView prevWordIds, SuggestionResults *const suggestionResults, const DictionaryStructureWithBufferPolicy *const dictStructurePolicy) : mPrevWordsInfo(prevWordsInfo), mPrevWordIds(prevWordIds), : mNgramContext(ngramContext), mPrevWordIds(prevWordIds), mSuggestionResults(suggestionResults), mDictStructurePolicy(dictStructurePolicy) {} void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbability, Loading @@ -69,7 +69,7 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi if (targetWordId == NOT_A_WORD_ID) { return; } if (mPrevWordsInfo->isNthPrevWordBeginningOfSentence(1 /* n */) if (mNgramContext->isNthPrevWordBeginningOfSentence(1 /* n */) && ngramProbability == NOT_A_PROBABILITY) { return; } Loading @@ -85,20 +85,20 @@ void Dictionary::NgramListenerForPrediction::onVisitEntry(const int ngramProbabi wordAttributes.getProbability()); } void Dictionary::getPredictions(const PrevWordsInfo *const prevWordsInfo, void Dictionary::getPredictions(const NgramContext *const ngramContext, SuggestionResults *const outSuggestionResults) const { TimeKeeper::setCurrentTime(); WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray; const WordIdArrayView prevWordIds = prevWordsInfo->getPrevWordIds( const WordIdArrayView prevWordIds = ngramContext->getPrevWordIds( mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray, true /* tryLowerCaseSearch */); NgramListenerForPrediction listener(prevWordsInfo, prevWordIds, outSuggestionResults, NgramListenerForPrediction listener(ngramContext, prevWordIds, outSuggestionResults, mDictionaryStructureWithBufferPolicy.get()); mDictionaryStructureWithBufferPolicy->iterateNgramEntries(prevWordIds, &listener); } int Dictionary::getProbability(const CodePointArrayView codePoints) const { return getNgramProbability(nullptr /* prevWordsInfo */, codePoints); return getNgramProbability(nullptr /* ngramContext */, codePoints); } int Dictionary::getMaxProbabilityOfExactMatches(const CodePointArrayView codePoints) const { Loading @@ -107,18 +107,18 @@ int Dictionary::getMaxProbabilityOfExactMatches(const CodePointArrayView codePoi mDictionaryStructureWithBufferPolicy.get(), codePoints); } int Dictionary::getNgramProbability(const PrevWordsInfo *const prevWordsInfo, int Dictionary::getNgramProbability(const NgramContext *const ngramContext, const CodePointArrayView codePoints) const { TimeKeeper::setCurrentTime(); const int wordId = mDictionaryStructureWithBufferPolicy->getWordId(codePoints, false /* forceLowerCaseSearch */); if (wordId == NOT_A_WORD_ID) return NOT_A_PROBABILITY; if (!prevWordsInfo) { if (!ngramContext) { return getDictionaryStructurePolicy()->getProbabilityOfWord(WordIdArrayView(), wordId); } WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray; const WordIdArrayView prevWordIds = prevWordsInfo->getPrevWordIds (mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray, const WordIdArrayView prevWordIds = ngramContext->getPrevWordIds( mDictionaryStructureWithBufferPolicy.get(), &prevWordIdArray, true /* tryLowerCaseSearch */); return getDictionaryStructurePolicy()->getProbabilityOfWord(prevWordIds, wordId); } Loading @@ -140,23 +140,23 @@ bool Dictionary::removeUnigramEntry(const CodePointArrayView codePoints) { return mDictionaryStructureWithBufferPolicy->removeUnigramEntry(codePoints); } bool Dictionary::addNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool Dictionary::addNgramEntry(const NgramContext *const ngramContext, const NgramProperty *const ngramProperty) { TimeKeeper::setCurrentTime(); return mDictionaryStructureWithBufferPolicy->addNgramEntry(prevWordsInfo, ngramProperty); return mDictionaryStructureWithBufferPolicy->addNgramEntry(ngramContext, ngramProperty); } bool Dictionary::removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool Dictionary::removeNgramEntry(const NgramContext *const ngramContext, const CodePointArrayView codePoints) { TimeKeeper::setCurrentTime(); return mDictionaryStructureWithBufferPolicy->removeNgramEntry(prevWordsInfo, codePoints); return mDictionaryStructureWithBufferPolicy->removeNgramEntry(ngramContext, codePoints); } bool Dictionary::updateEntriesForWordWithNgramContext(const PrevWordsInfo *const prevWordsInfo, bool Dictionary::updateEntriesForWordWithNgramContext(const NgramContext *const ngramContext, const CodePointArrayView codePoints, const bool isValidWord, const HistoricalInfo historicalInfo) { TimeKeeper::setCurrentTime(); return mDictionaryStructureWithBufferPolicy->updateEntriesForWordWithNgramContext(prevWordsInfo, return mDictionaryStructureWithBufferPolicy->updateEntriesForWordWithNgramContext(ngramContext, codePoints, isValidWord, historicalInfo); } Loading
native/jni/src/suggest/core/dictionary/dictionary.h +9 −9 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ namespace latinime { class DictionaryStructureWithBufferPolicy; class DicTraverseSession; class PrevWordsInfo; class NgramContext; class ProximityInfo; class SuggestionResults; class SuggestOptions; Loading Loading @@ -66,18 +66,18 @@ class Dictionary { void getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, const PrevWordsInfo *const prevWordsInfo, int inputSize, const NgramContext *const ngramContext, const SuggestOptions *const suggestOptions, const float weightOfLangModelVsSpatialModel, SuggestionResults *const outSuggestionResults) const; void getPredictions(const PrevWordsInfo *const prevWordsInfo, void getPredictions(const NgramContext *const ngramContext, SuggestionResults *const outSuggestionResults) const; int getProbability(const CodePointArrayView codePoints) const; int getMaxProbabilityOfExactMatches(const CodePointArrayView codePoints) const; int getNgramProbability(const PrevWordsInfo *const prevWordsInfo, int getNgramProbability(const NgramContext *const ngramContext, const CodePointArrayView codePoints) const; bool addUnigramEntry(const CodePointArrayView codePoints, Loading @@ -85,13 +85,13 @@ class Dictionary { bool removeUnigramEntry(const CodePointArrayView codePoints); bool addNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool addNgramEntry(const NgramContext *const ngramContext, const NgramProperty *const ngramProperty); bool removeNgramEntry(const PrevWordsInfo *const prevWordsInfo, bool removeNgramEntry(const NgramContext *const ngramContext, const CodePointArrayView codePoints); bool updateEntriesForWordWithNgramContext(const PrevWordsInfo *const prevWordsInfo, bool updateEntriesForWordWithNgramContext(const NgramContext *const ngramContext, const CodePointArrayView codePoints, const bool isValidWord, const HistoricalInfo historicalInfo); Loading Loading @@ -123,7 +123,7 @@ class Dictionary { class NgramListenerForPrediction : public NgramListener { public: NgramListenerForPrediction(const PrevWordsInfo *const prevWordsInfo, NgramListenerForPrediction(const NgramContext *const ngramContext, const WordIdArrayView prevWordIds, SuggestionResults *const suggestionResults, const DictionaryStructureWithBufferPolicy *const dictStructurePolicy); virtual void onVisitEntry(const int ngramProbability, const int targetWordId); Loading @@ -131,7 +131,7 @@ class Dictionary { private: DISALLOW_IMPLICIT_CONSTRUCTORS(NgramListenerForPrediction); const PrevWordsInfo *const mPrevWordsInfo; const NgramContext *const mNgramContext; const WordIdArrayView mPrevWordIds; SuggestionResults *const mSuggestionResults; const DictionaryStructureWithBufferPolicy *const mDictStructurePolicy; Loading
native/jni/src/suggest/core/dictionary/dictionary_utils.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -33,10 +33,10 @@ namespace latinime { std::vector<DicNode> current; std::vector<DicNode> next; // No prev words information. PrevWordsInfo emptyPrevWordsInfo; // No ngram context. NgramContext emptyNgramContext; WordIdArray<MAX_PREV_WORD_COUNT_FOR_N_GRAM> prevWordIdArray; const WordIdArrayView prevWordIds = emptyPrevWordsInfo.getPrevWordIds( const WordIdArrayView prevWordIds = emptyNgramContext.getPrevWordIds( dictionaryStructurePolicy, &prevWordIdArray, false /* tryLowerCaseSearch */); current.emplace_back(); DicNodeUtils::initAsRoot(dictionaryStructurePolicy, prevWordIds, ¤t.front()); Loading