From eb2fe2ab101c80f6e3d23010385a68dd3e9688ef Mon Sep 17 00:00:00 2001 From: Tom Ouyang Date: Wed, 18 Jul 2012 17:08:20 +0900 Subject: [PATCH] Add wrapper for incremental decoder. Change-Id: Ie11e2b83c2602c0d5a2739a7d4f4994f80d7e298 --- native/jni/Android.mk | 3 +- .../gesture/incremental_decoder_wrapper.cpp | 22 +++++ .../src/gesture/incremental_decoder_wrapper.h | 92 +++++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 native/jni/src/gesture/incremental_decoder_wrapper.cpp create mode 100644 native/jni/src/gesture/incremental_decoder_wrapper.h diff --git a/native/jni/Android.mk b/native/jni/Android.mk index 54f61d90d..06ed5718e 100644 --- a/native/jni/Android.mk +++ b/native/jni/Android.mk @@ -49,7 +49,8 @@ LATIN_IME_CORE_SRC_FILES := \ proximity_info.cpp \ proximity_info_state.cpp \ unigram_dictionary.cpp \ - gesture/gesture_decoder_wrapper.cpp + gesture/gesture_decoder_wrapper.cpp \ + gesture/incremental_decoder_wrapper.cpp LOCAL_SRC_FILES := \ $(LATIN_IME_JNI_SRC_FILES) \ diff --git a/native/jni/src/gesture/incremental_decoder_wrapper.cpp b/native/jni/src/gesture/incremental_decoder_wrapper.cpp new file mode 100644 index 000000000..8fcda6c9e --- /dev/null +++ b/native/jni/src/gesture/incremental_decoder_wrapper.cpp @@ -0,0 +1,22 @@ +/* + * 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. + */ + +#include "incremental_decoder_wrapper.h" + +namespace latinime { + IncrementalDecoderInterface * + (*IncrementalDecoderWrapper::sIncrementalDecoderFactoryMethod)(int, int) = 0; +} // namespace latinime diff --git a/native/jni/src/gesture/incremental_decoder_wrapper.h b/native/jni/src/gesture/incremental_decoder_wrapper.h new file mode 100644 index 000000000..698061548 --- /dev/null +++ b/native/jni/src/gesture/incremental_decoder_wrapper.h @@ -0,0 +1,92 @@ +/* + * 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_INCREMENTAL_DECODER_WRAPPER_H +#define LATINIME_INCREMENTAL_DECODER_WRAPPER_H + +#include +#include "defines.h" +#include "incremental_decoder_interface.h" + +namespace latinime { + +class UnigramDictionary; +class BigramDictionary; +class ProximityInfo; + +class IncrementalDecoderWrapper : public IncrementalDecoderInterface { + public: + IncrementalDecoderWrapper(const int maxWordLength, const int maxWords) { + mIncrementalDecoderInterface = getIncrementalDecoderInstance(maxWordLength, maxWords); + } + + virtual ~IncrementalDecoderWrapper() { + delete mIncrementalDecoderInterface; + } + + int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times, + int *pointerIds, int *codes, int inputSize, int commitPoint, + unsigned short *outWords, int *frequencies, int *outputIndices, int *outputTypes) { + if (!mIncrementalDecoderInterface) { + return 0; + } + return mIncrementalDecoderInterface->getSuggestions( + pInfo, inputXs, inputYs, times, pointerIds, codes, inputSize, commitPoint, + outWords, frequencies, outputIndices, outputTypes); + } + + void reset() { + if (!mIncrementalDecoderInterface) { + return; + } + mIncrementalDecoderInterface->reset(); + } + + void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram, + const uint8_t *dictRoot, int rootPos) { + if (!mIncrementalDecoderInterface) { + return; + } + mIncrementalDecoderInterface->setDict(dict, bigram, dictRoot, rootPos); + } + + void setPrevWord(const int32_t *prevWord, int prevWordLength) { + if (!mIncrementalDecoderInterface) { + return; + } + mIncrementalDecoderInterface->setPrevWord(prevWord, prevWordLength); + } + + static void setIncrementalDecoderFactoryMethod( + IncrementalDecoderInterface *(*factoryMethod)(int, int)) { + sIncrementalDecoderFactoryMethod = factoryMethod; + } + + private: + DISALLOW_COPY_AND_ASSIGN(IncrementalDecoderWrapper); + static IncrementalDecoderInterface *getIncrementalDecoderInstance(int maxWordLength, + int maxWords) { + if (sIncrementalDecoderFactoryMethod) { + return sIncrementalDecoderFactoryMethod(maxWordLength, maxWords); + } + return 0; + } + + static IncrementalDecoderInterface *(*sIncrementalDecoderFactoryMethod)(int, int); + IncrementalDecoderInterface *mIncrementalDecoderInterface; +}; +} // namespace latinime +#endif // LATINIME_INCREMENTAL_DECODER_WRAPPER_H