diff options
19 files changed, 51 insertions, 161 deletions
diff --git a/dictionaries/ru_wordlist.combined.gz b/dictionaries/ru_wordlist.combined.gz Binary files differindex 1cfab4e8c..8b67e7c83 100644 --- a/dictionaries/ru_wordlist.combined.gz +++ b/dictionaries/ru_wordlist.combined.gz diff --git a/java/res/raw/main_ru.dict b/java/res/raw/main_ru.dict Binary files differindex 707441616..3e23617c2 100644 --- a/java/res/raw/main_ru.dict +++ b/java/res/raw/main_ru.dict diff --git a/native/jni/Android.mk b/native/jni/Android.mk index 1518dad17..b0ddfda41 100644 --- a/native/jni/Android.mk +++ b/native/jni/Android.mk @@ -46,11 +46,11 @@ LATIN_IME_JNI_SRC_FILES := \ jni_common.cpp LATIN_IME_CORE_SRC_FILES := \ - correction.cpp \ - dic_traverse_wrapper.cpp \ - unigram_dictionary.cpp \ - words_priority_queue.cpp \ suggest/core/suggest.cpp \ + $(addprefix obsolete/, \ + correction.cpp \ + unigram_dictionary.cpp \ + words_priority_queue.cpp) \ $(addprefix suggest/core/dicnode/, \ dic_node.cpp \ dic_node_utils.cpp \ diff --git a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp index e94120587..34764c337 100644 --- a/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +++ b/native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp @@ -31,9 +31,9 @@ #include "com_android_inputmethod_latin_BinaryDictionary.h" -#include "correction.h" #include "jni.h" #include "jni_common.h" +#include "obsolete/correction.h" #include "suggest/core/dictionary/binary_dictionary_format.h" #include "suggest/core/dictionary/binary_dictionary_info.h" #include "suggest/core/dictionary/dictionary.h" @@ -137,7 +137,8 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, j Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict); if (!dictionary) return 0; ProximityInfo *pInfo = reinterpret_cast<ProximityInfo *>(proximityInfo); - void *traverseSession = reinterpret_cast<void *>(dicTraverseSession); + DicTraverseSession *traverseSession = + reinterpret_cast<DicTraverseSession *>(dicTraverseSession); // Input values int xCoordinates[inputSize]; diff --git a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp index 08124ffc8..d4541507b 100644 --- a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp +++ b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp @@ -17,36 +17,37 @@ #define LOG_TAG "LatinIME: jni: Session" #include "com_android_inputmethod_latin_DicTraverseSession.h" + #include "defines.h" -#include "dic_traverse_wrapper.h" #include "jni.h" #include "jni_common.h" +#include "suggest/core/session/dic_traverse_session.h" namespace latinime { class Dictionary; static jlong latinime_setDicTraverseSession(JNIEnv *env, jclass clazz, jstring localeJStr) { - void *traverseSession = DicTraverseWrapper::getDicTraverseSession(env, localeJStr); + void *traverseSession = DicTraverseSession::getSessionInstance(env, localeJStr); return reinterpret_cast<jlong>(traverseSession); } static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession, jlong dictionary, jintArray previousWord, jint previousWordLength) { - void *ts = reinterpret_cast<void *>(traverseSession); + DicTraverseSession *ts = reinterpret_cast<DicTraverseSession *>(traverseSession); Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary); if (!previousWord) { - DicTraverseWrapper::initDicTraverseSession( + DicTraverseSession::initSessionInstance( ts, dict, 0 /* prevWord */, 0 /* prevWordLength*/, 0 /* suggestOptions */); return; } int prevWord[previousWordLength]; env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord); - DicTraverseWrapper::initDicTraverseSession( + DicTraverseSession::initSessionInstance( ts, dict, prevWord, previousWordLength, 0 /* suggestOptions */); } static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) { - void *ts = reinterpret_cast<void *>(traverseSession); - DicTraverseWrapper::releaseDicTraverseSession(ts); + DicTraverseSession *ts = reinterpret_cast<DicTraverseSession *>(traverseSession); + DicTraverseSession::releaseSessionInstance(ts); } static JNINativeMethod sMethods[] = { diff --git a/native/jni/src/dic_traverse_wrapper.cpp b/native/jni/src/dic_traverse_wrapper.cpp deleted file mode 100644 index ec8c62dcc..000000000 --- a/native/jni/src/dic_traverse_wrapper.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2012, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "LatinIME: jni: Session" - -#include "dic_traverse_wrapper.h" - -namespace latinime { -void *(*DicTraverseWrapper::sDicTraverseSessionFactoryMethod)(JNIEnv *, jstring) = 0; -void (*DicTraverseWrapper::sDicTraverseSessionReleaseMethod)(void *) = 0; -void (*DicTraverseWrapper::sDicTraverseSessionInitMethod)( - void *, const Dictionary *const, const int *, const int, const SuggestOptions *const) = 0; -} // namespace latinime diff --git a/native/jni/src/dic_traverse_wrapper.h b/native/jni/src/dic_traverse_wrapper.h deleted file mode 100644 index 43b4c9ade..000000000 --- a/native/jni/src/dic_traverse_wrapper.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef LATINIME_DIC_TRAVERSE_WRAPPER_H -#define LATINIME_DIC_TRAVERSE_WRAPPER_H - -#include "defines.h" -#include "jni.h" - -namespace latinime { -class Dictionary; -class SuggestOptions; -// TODO: Remove -class DicTraverseWrapper { - public: - static void *getDicTraverseSession(JNIEnv *env, jstring locale) { - if (sDicTraverseSessionFactoryMethod) { - return sDicTraverseSessionFactoryMethod(env, locale); - } - return 0; - } - static void initDicTraverseSession(void *traverseSession, const Dictionary *const dictionary, - const int *prevWord, const int prevWordLength, - const SuggestOptions *const suggestOptions) { - if (sDicTraverseSessionInitMethod) { - sDicTraverseSessionInitMethod( - traverseSession, dictionary, prevWord, prevWordLength, suggestOptions); - } - } - static void releaseDicTraverseSession(void *traverseSession) { - if (sDicTraverseSessionReleaseMethod) { - sDicTraverseSessionReleaseMethod(traverseSession); - } - } - static void setTraverseSessionFactoryMethod(void *(*factoryMethod)(JNIEnv *, jstring)) { - sDicTraverseSessionFactoryMethod = factoryMethod; - } - static void setTraverseSessionInitMethod( - void (*initMethod)(void *, const Dictionary *const, const int *, const int, - const SuggestOptions *const)) { - sDicTraverseSessionInitMethod = initMethod; - } - static void setTraverseSessionReleaseMethod(void (*releaseMethod)(void *)) { - sDicTraverseSessionReleaseMethod = releaseMethod; - } - - private: - DISALLOW_IMPLICIT_CONSTRUCTORS(DicTraverseWrapper); - static void *(*sDicTraverseSessionFactoryMethod)(JNIEnv *, jstring); - static void (*sDicTraverseSessionInitMethod)( - void *, const Dictionary *const, const int *, const int, const SuggestOptions *const); - static void (*sDicTraverseSessionReleaseMethod)(void *); -}; -} // namespace latinime -#endif // LATINIME_DIC_TRAVERSE_WRAPPER_H diff --git a/native/jni/src/correction.cpp b/native/jni/src/obsolete/correction.cpp index feed5622b..e6c577f85 100644 --- a/native/jni/src/correction.cpp +++ b/native/jni/src/obsolete/correction.cpp @@ -18,8 +18,8 @@ #include <cmath> -#include "correction.h" #include "defines.h" +#include "obsolete/correction.h" #include "suggest/core/layout/proximity_info_state.h" #include "suggest/core/layout/touch_position_correction_utils.h" #include "suggest/policyimpl/utils/edit_distance.h" diff --git a/native/jni/src/correction.h b/native/jni/src/obsolete/correction.h index 84d6429ba..710220d66 100644 --- a/native/jni/src/correction.h +++ b/native/jni/src/obsolete/correction.h @@ -19,8 +19,8 @@ #include <cstring> // for memset() -#include "correction_state.h" #include "defines.h" +#include "obsolete/correction_state.h" #include "suggest/core/layout/proximity_info_state.h" #include "utils/char_utils.h" diff --git a/native/jni/src/correction_state.h b/native/jni/src/obsolete/correction_state.h index a63d4aa94..a63d4aa94 100644 --- a/native/jni/src/correction_state.h +++ b/native/jni/src/obsolete/correction_state.h diff --git a/native/jni/src/unigram_dictionary.cpp b/native/jni/src/obsolete/unigram_dictionary.cpp index 5820a1d0e..df6d425d3 100644 --- a/native/jni/src/unigram_dictionary.cpp +++ b/native/jni/src/obsolete/unigram_dictionary.cpp @@ -19,6 +19,9 @@ #define LOG_TAG "LatinIME: unigram_dictionary.cpp" #include "defines.h" +#include "obsolete/unigram_dictionary.h" +#include "obsolete/words_priority_queue.h" +#include "obsolete/words_priority_queue_pool.h" #include "suggest/core/dictionary/binary_dictionary_info.h" #include "suggest/core/dictionary/binary_format.h" #include "suggest/core/dictionary/dictionary.h" @@ -27,9 +30,6 @@ #include "suggest/core/dictionary/terminal_attributes.h" #include "suggest/core/layout/proximity_info.h" #include "utils/char_utils.h" -#include "unigram_dictionary.h" -#include "words_priority_queue.h" -#include "words_priority_queue_pool.h" namespace latinime { diff --git a/native/jni/src/unigram_dictionary.h b/native/jni/src/obsolete/unigram_dictionary.h index 4edd1f847..4edd1f847 100644 --- a/native/jni/src/unigram_dictionary.h +++ b/native/jni/src/obsolete/unigram_dictionary.h diff --git a/native/jni/src/words_priority_queue.cpp b/native/jni/src/obsolete/words_priority_queue.cpp index 7e18d0f87..563cf918e 100644 --- a/native/jni/src/words_priority_queue.cpp +++ b/native/jni/src/obsolete/words_priority_queue.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "words_priority_queue.h" +#include "obsolete/words_priority_queue.h" namespace latinime { diff --git a/native/jni/src/words_priority_queue.h b/native/jni/src/obsolete/words_priority_queue.h index 54e8007a2..337e3e32b 100644 --- a/native/jni/src/words_priority_queue.h +++ b/native/jni/src/obsolete/words_priority_queue.h @@ -20,8 +20,8 @@ #include <cstring> // for memcpy() #include <queue> -#include "correction.h" #include "defines.h" +#include "obsolete/correction.h" namespace latinime { diff --git a/native/jni/src/words_priority_queue_pool.h b/native/jni/src/obsolete/words_priority_queue_pool.h index 2cd210a05..bf04568db 100644 --- a/native/jni/src/words_priority_queue_pool.h +++ b/native/jni/src/obsolete/words_priority_queue_pool.h @@ -18,7 +18,7 @@ #define LATINIME_WORDS_PRIORITY_QUEUE_POOL_H #include "defines.h" -#include "words_priority_queue.h" +#include "obsolete/words_priority_queue.h" namespace latinime { diff --git a/native/jni/src/suggest/core/dictionary/dictionary.cpp b/native/jni/src/suggest/core/dictionary/dictionary.cpp index 6fd755dfe..e5956c754 100644 --- a/native/jni/src/suggest/core/dictionary/dictionary.cpp +++ b/native/jni/src/suggest/core/dictionary/dictionary.cpp @@ -22,14 +22,14 @@ #include <stdint.h> #include "defines.h" -#include "dic_traverse_wrapper.h" +#include "obsolete/unigram_dictionary.h" #include "suggest/core/dictionary/bigram_dictionary.h" #include "suggest/core/dictionary/binary_format.h" +#include "suggest/core/session/dic_traverse_session.h" #include "suggest/core/suggest.h" #include "suggest/core/suggest_options.h" #include "suggest/policyimpl/gesture/gesture_suggest_policy_factory.h" #include "suggest/policyimpl/typing/typing_suggest_policy_factory.h" -#include "unigram_dictionary.h" namespace latinime { @@ -50,14 +50,14 @@ Dictionary::~Dictionary() { delete mTypingSuggest; } -int Dictionary::getSuggestions(ProximityInfo *proximityInfo, void *traverseSession, +int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, const SuggestOptions *const suggestOptions, int *outWords, int *frequencies, int *spaceIndices, int *outputTypes) const { int result = 0; if (suggestOptions->isGesture()) { - DicTraverseWrapper::initDicTraverseSession( + DicTraverseSession::initSessionInstance( traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions); result = mGestureSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords, @@ -68,7 +68,7 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, void *traverseSessi return result; } else { if (USE_SUGGEST_INTERFACE_FOR_TYPING) { - DicTraverseWrapper::initDicTraverseSession( + DicTraverseSession::initSessionInstance( traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions); result = mTypingSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates, ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, diff --git a/native/jni/src/suggest/core/dictionary/dictionary.h b/native/jni/src/suggest/core/dictionary/dictionary.h index 771837bc6..40e25486e 100644 --- a/native/jni/src/suggest/core/dictionary/dictionary.h +++ b/native/jni/src/suggest/core/dictionary/dictionary.h @@ -25,6 +25,7 @@ namespace latinime { class BigramDictionary; +class DicTraverseSession; class ProximityInfo; class SuggestInterface; class SuggestOptions; @@ -54,9 +55,9 @@ class Dictionary { Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust); - int getSuggestions(ProximityInfo *proximityInfo, void *traverseSession, int *xcoordinates, - int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize, - int *prevWordCodePoints, int prevWordLength, int commitPoint, + int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession, + int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, + int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint, const SuggestOptions *const suggestOptions, int *outWords, int *frequencies, int *spaceIndices, int *outputTypes) const; diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.cpp b/native/jni/src/suggest/core/session/dic_traverse_session.cpp index be293df42..c398caefa 100644 --- a/native/jni/src/suggest/core/session/dic_traverse_session.cpp +++ b/native/jni/src/suggest/core/session/dic_traverse_session.cpp @@ -17,7 +17,6 @@ #include "suggest/core/session/dic_traverse_session.h" #include "defines.h" -#include "dic_traverse_wrapper.h" #include "jni.h" #include "suggest/core/dicnode/dic_node_utils.h" #include "suggest/core/dictionary/binary_dictionary_info.h" @@ -26,43 +25,6 @@ namespace latinime { -const int DicTraverseSession::CACHE_START_INPUT_LENGTH_THRESHOLD = 20; - -// A factory method for DicTraverseSession -static void *getSessionInstance(JNIEnv *env, jstring localeStr) { - return new DicTraverseSession(env, localeStr); -} - -// TODO: Pass "DicTraverseSession *traverseSession" when the source code structure settles down. -static void initSessionInstance(void *traverseSession, const Dictionary *const dictionary, - const int *prevWord, const int prevWordLength, - const SuggestOptions *const suggestOptions) { - if (traverseSession) { - DicTraverseSession *tSession = static_cast<DicTraverseSession *>(traverseSession); - tSession->init(dictionary, prevWord, prevWordLength, suggestOptions); - } -} - -// TODO: Pass "DicTraverseSession *traverseSession" when the source code structure settles down. -static void releaseSessionInstance(void *traverseSession) { - delete static_cast<DicTraverseSession *>(traverseSession); -} - -// An ad-hoc internal class to register the factory method defined above -class TraverseSessionFactoryRegisterer { - public: - TraverseSessionFactoryRegisterer() { - DicTraverseWrapper::setTraverseSessionFactoryMethod(getSessionInstance); - DicTraverseWrapper::setTraverseSessionInitMethod(initSessionInstance); - DicTraverseWrapper::setTraverseSessionReleaseMethod(releaseSessionInstance); - } - private: - DISALLOW_COPY_AND_ASSIGN(TraverseSessionFactoryRegisterer); -}; - -// To invoke the TraverseSessionFactoryRegisterer constructor in the global constructor. -static TraverseSessionFactoryRegisterer traverseSessionFactoryRegisterer; - void DicTraverseSession::init(const Dictionary *const dictionary, const int *prevWord, int prevWordLength, const SuggestOptions *const suggestOptions) { mDictionary = dictionary; diff --git a/native/jni/src/suggest/core/session/dic_traverse_session.h b/native/jni/src/suggest/core/session/dic_traverse_session.h index 3b6a3dc8c..630b3b59b 100644 --- a/native/jni/src/suggest/core/session/dic_traverse_session.h +++ b/native/jni/src/suggest/core/session/dic_traverse_session.h @@ -35,6 +35,25 @@ class SuggestOptions; class DicTraverseSession { public: + + // A factory method for DicTraverseSession + static AK_FORCE_INLINE void *getSessionInstance(JNIEnv *env, jstring localeStr) { + return new DicTraverseSession(env, localeStr); + } + + static AK_FORCE_INLINE void initSessionInstance(DicTraverseSession *traverseSession, + const Dictionary *const dictionary, const int *prevWord, const int prevWordLength, + const SuggestOptions *const suggestOptions) { + if (traverseSession) { + DicTraverseSession *tSession = static_cast<DicTraverseSession *>(traverseSession); + tSession->init(dictionary, prevWord, prevWordLength, suggestOptions); + } + } + + static AK_FORCE_INLINE void releaseSessionInstance(DicTraverseSession *traverseSession) { + delete traverseSession; + } + AK_FORCE_INLINE DicTraverseSession(JNIEnv *env, jstring localeStr) : mPrevWordPos(NOT_VALID_WORD), mProximityInfo(0), mDictionary(0), mSuggestOptions(0), mDicNodesCache(), mMultiBigramMap(), |