Purge DicTraverseWrapper
bug: 8550444 Change-Id: Iad017e66ac579c6727b9f60ad9cda64e478200e5main
parent
0e66ab7433
commit
7c92b421ee
|
@ -47,7 +47,6 @@ LATIN_IME_JNI_SRC_FILES := \
|
||||||
|
|
||||||
LATIN_IME_CORE_SRC_FILES := \
|
LATIN_IME_CORE_SRC_FILES := \
|
||||||
correction.cpp \
|
correction.cpp \
|
||||||
dic_traverse_wrapper.cpp \
|
|
||||||
unigram_dictionary.cpp \
|
unigram_dictionary.cpp \
|
||||||
words_priority_queue.cpp \
|
words_priority_queue.cpp \
|
||||||
suggest/core/suggest.cpp \
|
suggest/core/suggest.cpp \
|
||||||
|
|
|
@ -137,7 +137,8 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jclass clazz, j
|
||||||
Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
|
Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict);
|
||||||
if (!dictionary) return 0;
|
if (!dictionary) return 0;
|
||||||
ProximityInfo *pInfo = reinterpret_cast<ProximityInfo *>(proximityInfo);
|
ProximityInfo *pInfo = reinterpret_cast<ProximityInfo *>(proximityInfo);
|
||||||
void *traverseSession = reinterpret_cast<void *>(dicTraverseSession);
|
DicTraverseSession *traverseSession =
|
||||||
|
reinterpret_cast<DicTraverseSession *>(dicTraverseSession);
|
||||||
|
|
||||||
// Input values
|
// Input values
|
||||||
int xCoordinates[inputSize];
|
int xCoordinates[inputSize];
|
||||||
|
|
|
@ -17,36 +17,37 @@
|
||||||
#define LOG_TAG "LatinIME: jni: Session"
|
#define LOG_TAG "LatinIME: jni: Session"
|
||||||
|
|
||||||
#include "com_android_inputmethod_latin_DicTraverseSession.h"
|
#include "com_android_inputmethod_latin_DicTraverseSession.h"
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "dic_traverse_wrapper.h"
|
|
||||||
#include "jni.h"
|
#include "jni.h"
|
||||||
#include "jni_common.h"
|
#include "jni_common.h"
|
||||||
|
#include "suggest/core/session/dic_traverse_session.h"
|
||||||
|
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
class Dictionary;
|
class Dictionary;
|
||||||
static jlong latinime_setDicTraverseSession(JNIEnv *env, jclass clazz, jstring localeJStr) {
|
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);
|
return reinterpret_cast<jlong>(traverseSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession,
|
static void latinime_initDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession,
|
||||||
jlong dictionary, jintArray previousWord, jint previousWordLength) {
|
jlong dictionary, jintArray previousWord, jint previousWordLength) {
|
||||||
void *ts = reinterpret_cast<void *>(traverseSession);
|
DicTraverseSession *ts = reinterpret_cast<DicTraverseSession *>(traverseSession);
|
||||||
Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary);
|
Dictionary *dict = reinterpret_cast<Dictionary *>(dictionary);
|
||||||
if (!previousWord) {
|
if (!previousWord) {
|
||||||
DicTraverseWrapper::initDicTraverseSession(
|
DicTraverseSession::initSessionInstance(
|
||||||
ts, dict, 0 /* prevWord */, 0 /* prevWordLength*/, 0 /* suggestOptions */);
|
ts, dict, 0 /* prevWord */, 0 /* prevWordLength*/, 0 /* suggestOptions */);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int prevWord[previousWordLength];
|
int prevWord[previousWordLength];
|
||||||
env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord);
|
env->GetIntArrayRegion(previousWord, 0, previousWordLength, prevWord);
|
||||||
DicTraverseWrapper::initDicTraverseSession(
|
DicTraverseSession::initSessionInstance(
|
||||||
ts, dict, prevWord, previousWordLength, 0 /* suggestOptions */);
|
ts, dict, prevWord, previousWordLength, 0 /* suggestOptions */);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) {
|
static void latinime_releaseDicTraverseSession(JNIEnv *env, jclass clazz, jlong traverseSession) {
|
||||||
void *ts = reinterpret_cast<void *>(traverseSession);
|
DicTraverseSession *ts = reinterpret_cast<DicTraverseSession *>(traverseSession);
|
||||||
DicTraverseWrapper::releaseDicTraverseSession(ts);
|
DicTraverseSession::releaseSessionInstance(ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
static JNINativeMethod sMethods[] = {
|
static JNINativeMethod sMethods[] = {
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -22,9 +22,9 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "dic_traverse_wrapper.h"
|
|
||||||
#include "suggest/core/dictionary/bigram_dictionary.h"
|
#include "suggest/core/dictionary/bigram_dictionary.h"
|
||||||
#include "suggest/core/dictionary/binary_format.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.h"
|
||||||
#include "suggest/core/suggest_options.h"
|
#include "suggest/core/suggest_options.h"
|
||||||
#include "suggest/policyimpl/gesture/gesture_suggest_policy_factory.h"
|
#include "suggest/policyimpl/gesture/gesture_suggest_policy_factory.h"
|
||||||
|
@ -50,14 +50,14 @@ Dictionary::~Dictionary() {
|
||||||
delete mTypingSuggest;
|
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 *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
|
||||||
int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint,
|
int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint,
|
||||||
const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
|
const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
|
||||||
int *spaceIndices, int *outputTypes) const {
|
int *spaceIndices, int *outputTypes) const {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (suggestOptions->isGesture()) {
|
if (suggestOptions->isGesture()) {
|
||||||
DicTraverseWrapper::initDicTraverseSession(
|
DicTraverseSession::initSessionInstance(
|
||||||
traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
|
traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
|
||||||
result = mGestureSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
|
result = mGestureSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
|
||||||
ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords,
|
ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords,
|
||||||
|
@ -68,7 +68,7 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, void *traverseSessi
|
||||||
return result;
|
return result;
|
||||||
} else {
|
} else {
|
||||||
if (USE_SUGGEST_INTERFACE_FOR_TYPING) {
|
if (USE_SUGGEST_INTERFACE_FOR_TYPING) {
|
||||||
DicTraverseWrapper::initDicTraverseSession(
|
DicTraverseSession::initSessionInstance(
|
||||||
traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
|
traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
|
||||||
result = mTypingSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
|
result = mTypingSuggest->getSuggestions(proximityInfo, traverseSession, xcoordinates,
|
||||||
ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint,
|
ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint,
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
namespace latinime {
|
namespace latinime {
|
||||||
|
|
||||||
class BigramDictionary;
|
class BigramDictionary;
|
||||||
|
class DicTraverseSession;
|
||||||
class ProximityInfo;
|
class ProximityInfo;
|
||||||
class SuggestInterface;
|
class SuggestInterface;
|
||||||
class SuggestOptions;
|
class SuggestOptions;
|
||||||
|
@ -54,9 +55,9 @@ class Dictionary {
|
||||||
|
|
||||||
Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust);
|
Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust);
|
||||||
|
|
||||||
int getSuggestions(ProximityInfo *proximityInfo, void *traverseSession, int *xcoordinates,
|
int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
|
||||||
int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints, int inputSize,
|
int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
|
||||||
int *prevWordCodePoints, int prevWordLength, int commitPoint,
|
int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint,
|
||||||
const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
|
const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
|
||||||
int *spaceIndices, int *outputTypes) const;
|
int *spaceIndices, int *outputTypes) const;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include "suggest/core/session/dic_traverse_session.h"
|
#include "suggest/core/session/dic_traverse_session.h"
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "dic_traverse_wrapper.h"
|
|
||||||
#include "jni.h"
|
#include "jni.h"
|
||||||
#include "suggest/core/dicnode/dic_node_utils.h"
|
#include "suggest/core/dicnode/dic_node_utils.h"
|
||||||
#include "suggest/core/dictionary/binary_dictionary_info.h"
|
#include "suggest/core/dictionary/binary_dictionary_info.h"
|
||||||
|
@ -26,43 +25,6 @@
|
||||||
|
|
||||||
namespace latinime {
|
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,
|
void DicTraverseSession::init(const Dictionary *const dictionary, const int *prevWord,
|
||||||
int prevWordLength, const SuggestOptions *const suggestOptions) {
|
int prevWordLength, const SuggestOptions *const suggestOptions) {
|
||||||
mDictionary = dictionary;
|
mDictionary = dictionary;
|
||||||
|
|
|
@ -35,6 +35,25 @@ class SuggestOptions;
|
||||||
|
|
||||||
class DicTraverseSession {
|
class DicTraverseSession {
|
||||||
public:
|
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)
|
AK_FORCE_INLINE DicTraverseSession(JNIEnv *env, jstring localeStr)
|
||||||
: mPrevWordPos(NOT_VALID_WORD), mProximityInfo(0),
|
: mPrevWordPos(NOT_VALID_WORD), mProximityInfo(0),
|
||||||
mDictionary(0), mSuggestOptions(0), mDicNodesCache(), mMultiBigramMap(),
|
mDictionary(0), mSuggestOptions(0), mDicNodesCache(), mMultiBigramMap(),
|
||||||
|
|
Loading…
Reference in New Issue