Loading java/src/com/android/inputmethod/latin/BinaryDictionary.java +19 −18 Original line number Diff line number Diff line Loading @@ -68,11 +68,12 @@ public final class BinaryDictionary extends Dictionary { private static final int FORMAT_WORD_PROPERTY_HAS_BIGRAMS_INDEX = 2; private static final int FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX = 3; // Format to get unigram historical info from native side via getWordPropertyNative(). private static final int FORMAT_WORD_PROPERTY_OUTPUT_HISTORICAL_INFO_COUNT = 3; private static final int FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX = 0; private static final int FORMAT_WORD_PROPERTY_LEVEL_INDEX = 1; private static final int FORMAT_WORD_PROPERTY_COUNT_INDEX = 2; // Format to get probability and historical info from native side via getWordPropertyNative(). public static final int FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT = 4; public static final int FORMAT_WORD_PROPERTY_PROBABILITY_INDEX = 0; public static final int FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX = 1; public static final int FORMAT_WORD_PROPERTY_LEVEL_INDEX = 2; public static final int FORMAT_WORD_PROPERTY_COUNT_INDEX = 3; private long mNativeDict; private final Locale mLocale; Loading Loading @@ -144,9 +145,9 @@ public final class BinaryDictionary extends Dictionary { private static native int getProbabilityNative(long dict, int[] word); private static native int getBigramProbabilityNative(long dict, int[] word0, int[] word1); private static native void getWordPropertyNative(long dict, int[] word, int[] outCodePoints, boolean[] outFlags, int[] outProbability, int[] outHistoricalInfo, ArrayList<int[]> outShortcutTargets, ArrayList<Integer> outShortcutProbabilities); int[] outCodePoints, boolean[] outFlags, int[] outProbabilityInfo, ArrayList<int[]> outBigramTargets, ArrayList<int[]> outBigramProbabilityInfo, ArrayList<int[]> outShortcutTargets, ArrayList<Integer> outShortcutProbabilities); private static native int getSuggestionsNative(long dict, long proximityInfo, long traverseSession, int[] xCoordinates, int[] yCoordinates, int[] times, int[] pointerIds, int[] inputCodePoints, int inputSize, int commitPoint, Loading Loading @@ -313,22 +314,22 @@ public final class BinaryDictionary extends Dictionary { final int[] codePoints = StringUtils.toCodePointArray(word); final int[] outCodePoints = new int[MAX_WORD_LENGTH]; final boolean[] outFlags = new boolean[FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT]; final int[] outProbability = new int[1]; final int[] outHistoricalInfo = new int[FORMAT_WORD_PROPERTY_OUTPUT_HISTORICAL_INFO_COUNT]; final int[] outProbabilityInfo = new int[FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT]; final ArrayList<int[]> outBigramTargets = CollectionUtils.newArrayList(); final ArrayList<int[]> outBigramProbabilityInfo = CollectionUtils.newArrayList(); final ArrayList<int[]> outShortcutTargets = CollectionUtils.newArrayList(); final ArrayList<Integer> outShortcutProbabilities = CollectionUtils.newArrayList(); getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbability, outHistoricalInfo, outShortcutTargets, outShortcutProbabilities); getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo, outShortcutTargets, outShortcutProbabilities); return new WordProperty(codePoints, outFlags[FORMAT_WORD_PROPERTY_IS_NOT_A_WORD_INDEX], outFlags[FORMAT_WORD_PROPERTY_IS_BLACKLISTED_INDEX], outFlags[FORMAT_WORD_PROPERTY_HAS_BIGRAMS_INDEX], outFlags[FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX], outProbability[0], outHistoricalInfo[FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX], outHistoricalInfo[FORMAT_WORD_PROPERTY_LEVEL_INDEX], outHistoricalInfo[FORMAT_WORD_PROPERTY_COUNT_INDEX], outShortcutTargets, outShortcutProbabilities); outFlags[FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX], outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo, outShortcutTargets, outShortcutProbabilities); } // Add a unigram entry to binary dictionary with unigram attributes in native code. Loading java/src/com/android/inputmethod/latin/utils/WordProperty.java +40 −14 Original line number Diff line number Diff line Loading @@ -32,14 +32,29 @@ public class WordProperty { public final boolean mIsBlacklisted; public final boolean mHasBigrams; public final boolean mHasShortcuts; public final ProbabilityInfo mProbabilityInfo; public final ArrayList<WeightedString> mBigramTargets = CollectionUtils.newArrayList(); public final ArrayList<ProbabilityInfo> mBigramProbabilityInfo = CollectionUtils.newArrayList(); public final ArrayList<WeightedString> mShortcutTargets = CollectionUtils.newArrayList(); // TODO: Use this kind of Probability class for dictionary read/write code under the makedict // package. public static final class ProbabilityInfo { public final int mProbability; // mTimestamp, mLevel and mCount are historical info. These values are depend on the // wTimestamp, mLevel and mCount are historical info. These values are depend on the // implementation in native code; thus, we must not use them and have any assumptions about // them except for tests. public final int mTimestamp; public final int mLevel; public final int mCount; public final ArrayList<WeightedString> mShortcutTargets = CollectionUtils.newArrayList(); public ProbabilityInfo(final int[] probabilityInfo) { mProbability = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_PROBABILITY_INDEX]; mTimestamp = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX]; mLevel = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_LEVEL_INDEX]; mCount = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_COUNT_INDEX]; } } private static int getCodePointCount(final int[] codePoints) { for (int i = 0; i < codePoints.length; i++) { Loading @@ -53,18 +68,29 @@ public class WordProperty { // This represents invalid word when the probability is BinaryDictionary.NOT_A_PROBABILITY. public WordProperty(final int[] codePoints, final boolean isNotAWord, final boolean isBlacklisted, final boolean hasBigram, final boolean hasShortcuts, final int probability, final int timestamp, final int level, final int count, final ArrayList<int[]> shortcutTargets, final boolean hasShortcuts, final int[] probabilityInfo, final ArrayList<int[]> bigramTargets, final ArrayList<int[]> bigramProbabilityInfo, final ArrayList<int[]> shortcutTargets, final ArrayList<Integer> shortcutProbabilities) { mCodePoints = new String(codePoints, 0 /* offset */, getCodePointCount(codePoints)); mIsNotAWord = isNotAWord; mIsBlacklisted = isBlacklisted; mHasBigrams = hasBigram; mHasShortcuts = hasShortcuts; mProbability = probability; mTimestamp = timestamp; mLevel = level; mCount = count; mProbabilityInfo = new ProbabilityInfo(probabilityInfo); final int bigramTargetCount = bigramTargets.size(); for (int i = 0; i < bigramTargetCount; i++) { final int[] bigramTargetCodePointArray = bigramTargets.get(i); final String bigramTargetString = new String(bigramTargetCodePointArray, 0 /* offset */, getCodePointCount(bigramTargetCodePointArray)); final ProbabilityInfo bigramProbability = new ProbabilityInfo(bigramProbabilityInfo.get(i)); mBigramTargets.add( new WeightedString(bigramTargetString, bigramProbability.mProbability)); mBigramProbabilityInfo.add(bigramProbability); } final int shortcutTargetCount = shortcutTargets.size(); for (int i = 0; i < shortcutTargetCount; i++) { final int[] shortcutTargetCodePointArray = shortcutTargets.get(i); Loading @@ -77,6 +103,6 @@ public class WordProperty { @UsedForTesting public boolean isValid() { return mProbability != BinaryDictionary.NOT_A_PROBABILITY; return mProbabilityInfo.mProbability != BinaryDictionary.NOT_A_PROBABILITY; } } No newline at end of file native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -262,16 +262,17 @@ static jint latinime_BinaryDictionary_getBigramProbability(JNIEnv *env, jclass c static void latinime_BinaryDictionary_getWordProperty(JNIEnv *env, jclass clazz, jlong dict, jintArray word, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) { jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilityInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) { Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict); if (!dictionary) return; const jsize wordLength = env->GetArrayLength(word); int wordCodePoints[wordLength]; env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints); const WordProperty wordProperty = dictionary->getWordProperty(wordCodePoints, wordLength); wordProperty.outputProperties(env, outCodePoints, outFlags, outProbability, outHistoricalInfo, outShortcutTargets, outShortcutProbabilities); wordProperty.outputProperties(env, outCodePoints, outFlags, outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo, outShortcutTargets, outShortcutProbabilities); } static jfloat latinime_BinaryDictionary_calcNormalizedScore(JNIEnv *env, jclass clazz, Loading Loading @@ -521,7 +522,8 @@ static const JNINativeMethod sMethods[] = { }, { const_cast<char *>("getWordPropertyNative"), const_cast<char *>("(J[I[I[Z[I[ILjava/util/ArrayList;Ljava/util/ArrayList;)V"), const_cast<char *>("(J[I[I[Z[ILjava/util/ArrayList;Ljava/util/ArrayList;" "Ljava/util/ArrayList;Ljava/util/ArrayList;)V"), reinterpret_cast<void *>(latinime_BinaryDictionary_getWordProperty) }, { Loading native/jni/src/suggest/core/dictionary/word_property.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -19,20 +19,23 @@ namespace latinime { void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) const { jbooleanArray outFlags, jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilities, jobject outShortcutTargets, jobject outShortcutProbabilities) const { env->SetIntArrayRegion(outCodePoints, 0 /* start */, mCodePoints.size(), &mCodePoints[0]); jboolean flags[] = {mIsNotAWord, mIsBlacklisted, mHasBigrams, mHasShortcuts}; env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags); env->SetIntArrayRegion(outProbability, 0 /* start */, 1 /* len */, &mProbability); int historicalInfo[] = {mTimestamp, mLevel, mCount}; env->SetIntArrayRegion(outHistoricalInfo, 0 /* start */, NELEMS(historicalInfo), historicalInfo); int probabilityInfo[] = {mProbability, mTimestamp, mLevel, mCount}; env->SetIntArrayRegion(outProbabilityInfo, 0 /* start */, NELEMS(probabilityInfo), probabilityInfo); jclass integerClass = env->FindClass("java/lang/Integer"); jmethodID intToIntegerConstructorId = env->GetMethodID(integerClass, "<init>", "(I)V"); jclass arrayListClass = env->FindClass("java/util/ArrayList"); jmethodID addMethodId = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // TODO: Output bigrams. // Output shortcuts. const int shortcutTargetCount = mShortcuts.size(); for (int i = 0; i < shortcutTargetCount; ++i) { const std::vector<int> *const targetCodePoints = mShortcuts[i].getTargetCodePoints(); Loading native/jni/src/suggest/core/dictionary/word_property.h +2 −2 Original line number Diff line number Diff line Loading @@ -78,8 +78,8 @@ class WordProperty { mShortcuts(*shortcuts) {} void outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) const; jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilities, jobject outShortcutTargets, jobject outShortcutProbabilities) const; private: DISALLOW_ASSIGNMENT_OPERATOR(WordProperty); Loading Loading
java/src/com/android/inputmethod/latin/BinaryDictionary.java +19 −18 Original line number Diff line number Diff line Loading @@ -68,11 +68,12 @@ public final class BinaryDictionary extends Dictionary { private static final int FORMAT_WORD_PROPERTY_HAS_BIGRAMS_INDEX = 2; private static final int FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX = 3; // Format to get unigram historical info from native side via getWordPropertyNative(). private static final int FORMAT_WORD_PROPERTY_OUTPUT_HISTORICAL_INFO_COUNT = 3; private static final int FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX = 0; private static final int FORMAT_WORD_PROPERTY_LEVEL_INDEX = 1; private static final int FORMAT_WORD_PROPERTY_COUNT_INDEX = 2; // Format to get probability and historical info from native side via getWordPropertyNative(). public static final int FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT = 4; public static final int FORMAT_WORD_PROPERTY_PROBABILITY_INDEX = 0; public static final int FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX = 1; public static final int FORMAT_WORD_PROPERTY_LEVEL_INDEX = 2; public static final int FORMAT_WORD_PROPERTY_COUNT_INDEX = 3; private long mNativeDict; private final Locale mLocale; Loading Loading @@ -144,9 +145,9 @@ public final class BinaryDictionary extends Dictionary { private static native int getProbabilityNative(long dict, int[] word); private static native int getBigramProbabilityNative(long dict, int[] word0, int[] word1); private static native void getWordPropertyNative(long dict, int[] word, int[] outCodePoints, boolean[] outFlags, int[] outProbability, int[] outHistoricalInfo, ArrayList<int[]> outShortcutTargets, ArrayList<Integer> outShortcutProbabilities); int[] outCodePoints, boolean[] outFlags, int[] outProbabilityInfo, ArrayList<int[]> outBigramTargets, ArrayList<int[]> outBigramProbabilityInfo, ArrayList<int[]> outShortcutTargets, ArrayList<Integer> outShortcutProbabilities); private static native int getSuggestionsNative(long dict, long proximityInfo, long traverseSession, int[] xCoordinates, int[] yCoordinates, int[] times, int[] pointerIds, int[] inputCodePoints, int inputSize, int commitPoint, Loading Loading @@ -313,22 +314,22 @@ public final class BinaryDictionary extends Dictionary { final int[] codePoints = StringUtils.toCodePointArray(word); final int[] outCodePoints = new int[MAX_WORD_LENGTH]; final boolean[] outFlags = new boolean[FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT]; final int[] outProbability = new int[1]; final int[] outHistoricalInfo = new int[FORMAT_WORD_PROPERTY_OUTPUT_HISTORICAL_INFO_COUNT]; final int[] outProbabilityInfo = new int[FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT]; final ArrayList<int[]> outBigramTargets = CollectionUtils.newArrayList(); final ArrayList<int[]> outBigramProbabilityInfo = CollectionUtils.newArrayList(); final ArrayList<int[]> outShortcutTargets = CollectionUtils.newArrayList(); final ArrayList<Integer> outShortcutProbabilities = CollectionUtils.newArrayList(); getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbability, outHistoricalInfo, outShortcutTargets, outShortcutProbabilities); getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo, outShortcutTargets, outShortcutProbabilities); return new WordProperty(codePoints, outFlags[FORMAT_WORD_PROPERTY_IS_NOT_A_WORD_INDEX], outFlags[FORMAT_WORD_PROPERTY_IS_BLACKLISTED_INDEX], outFlags[FORMAT_WORD_PROPERTY_HAS_BIGRAMS_INDEX], outFlags[FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX], outProbability[0], outHistoricalInfo[FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX], outHistoricalInfo[FORMAT_WORD_PROPERTY_LEVEL_INDEX], outHistoricalInfo[FORMAT_WORD_PROPERTY_COUNT_INDEX], outShortcutTargets, outShortcutProbabilities); outFlags[FORMAT_WORD_PROPERTY_HAS_SHORTCUTS_INDEX], outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo, outShortcutTargets, outShortcutProbabilities); } // Add a unigram entry to binary dictionary with unigram attributes in native code. Loading
java/src/com/android/inputmethod/latin/utils/WordProperty.java +40 −14 Original line number Diff line number Diff line Loading @@ -32,14 +32,29 @@ public class WordProperty { public final boolean mIsBlacklisted; public final boolean mHasBigrams; public final boolean mHasShortcuts; public final ProbabilityInfo mProbabilityInfo; public final ArrayList<WeightedString> mBigramTargets = CollectionUtils.newArrayList(); public final ArrayList<ProbabilityInfo> mBigramProbabilityInfo = CollectionUtils.newArrayList(); public final ArrayList<WeightedString> mShortcutTargets = CollectionUtils.newArrayList(); // TODO: Use this kind of Probability class for dictionary read/write code under the makedict // package. public static final class ProbabilityInfo { public final int mProbability; // mTimestamp, mLevel and mCount are historical info. These values are depend on the // wTimestamp, mLevel and mCount are historical info. These values are depend on the // implementation in native code; thus, we must not use them and have any assumptions about // them except for tests. public final int mTimestamp; public final int mLevel; public final int mCount; public final ArrayList<WeightedString> mShortcutTargets = CollectionUtils.newArrayList(); public ProbabilityInfo(final int[] probabilityInfo) { mProbability = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_PROBABILITY_INDEX]; mTimestamp = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_TIMESTAMP_INDEX]; mLevel = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_LEVEL_INDEX]; mCount = probabilityInfo[BinaryDictionary.FORMAT_WORD_PROPERTY_COUNT_INDEX]; } } private static int getCodePointCount(final int[] codePoints) { for (int i = 0; i < codePoints.length; i++) { Loading @@ -53,18 +68,29 @@ public class WordProperty { // This represents invalid word when the probability is BinaryDictionary.NOT_A_PROBABILITY. public WordProperty(final int[] codePoints, final boolean isNotAWord, final boolean isBlacklisted, final boolean hasBigram, final boolean hasShortcuts, final int probability, final int timestamp, final int level, final int count, final ArrayList<int[]> shortcutTargets, final boolean hasShortcuts, final int[] probabilityInfo, final ArrayList<int[]> bigramTargets, final ArrayList<int[]> bigramProbabilityInfo, final ArrayList<int[]> shortcutTargets, final ArrayList<Integer> shortcutProbabilities) { mCodePoints = new String(codePoints, 0 /* offset */, getCodePointCount(codePoints)); mIsNotAWord = isNotAWord; mIsBlacklisted = isBlacklisted; mHasBigrams = hasBigram; mHasShortcuts = hasShortcuts; mProbability = probability; mTimestamp = timestamp; mLevel = level; mCount = count; mProbabilityInfo = new ProbabilityInfo(probabilityInfo); final int bigramTargetCount = bigramTargets.size(); for (int i = 0; i < bigramTargetCount; i++) { final int[] bigramTargetCodePointArray = bigramTargets.get(i); final String bigramTargetString = new String(bigramTargetCodePointArray, 0 /* offset */, getCodePointCount(bigramTargetCodePointArray)); final ProbabilityInfo bigramProbability = new ProbabilityInfo(bigramProbabilityInfo.get(i)); mBigramTargets.add( new WeightedString(bigramTargetString, bigramProbability.mProbability)); mBigramProbabilityInfo.add(bigramProbability); } final int shortcutTargetCount = shortcutTargets.size(); for (int i = 0; i < shortcutTargetCount; i++) { final int[] shortcutTargetCodePointArray = shortcutTargets.get(i); Loading @@ -77,6 +103,6 @@ public class WordProperty { @UsedForTesting public boolean isValid() { return mProbability != BinaryDictionary.NOT_A_PROBABILITY; return mProbabilityInfo.mProbability != BinaryDictionary.NOT_A_PROBABILITY; } } No newline at end of file
native/jni/com_android_inputmethod_latin_BinaryDictionary.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -262,16 +262,17 @@ static jint latinime_BinaryDictionary_getBigramProbability(JNIEnv *env, jclass c static void latinime_BinaryDictionary_getWordProperty(JNIEnv *env, jclass clazz, jlong dict, jintArray word, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) { jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilityInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) { Dictionary *dictionary = reinterpret_cast<Dictionary *>(dict); if (!dictionary) return; const jsize wordLength = env->GetArrayLength(word); int wordCodePoints[wordLength]; env->GetIntArrayRegion(word, 0, wordLength, wordCodePoints); const WordProperty wordProperty = dictionary->getWordProperty(wordCodePoints, wordLength); wordProperty.outputProperties(env, outCodePoints, outFlags, outProbability, outHistoricalInfo, outShortcutTargets, outShortcutProbabilities); wordProperty.outputProperties(env, outCodePoints, outFlags, outProbabilityInfo, outBigramTargets, outBigramProbabilityInfo, outShortcutTargets, outShortcutProbabilities); } static jfloat latinime_BinaryDictionary_calcNormalizedScore(JNIEnv *env, jclass clazz, Loading Loading @@ -521,7 +522,8 @@ static const JNINativeMethod sMethods[] = { }, { const_cast<char *>("getWordPropertyNative"), const_cast<char *>("(J[I[I[Z[I[ILjava/util/ArrayList;Ljava/util/ArrayList;)V"), const_cast<char *>("(J[I[I[Z[ILjava/util/ArrayList;Ljava/util/ArrayList;" "Ljava/util/ArrayList;Ljava/util/ArrayList;)V"), reinterpret_cast<void *>(latinime_BinaryDictionary_getWordProperty) }, { Loading
native/jni/src/suggest/core/dictionary/word_property.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -19,20 +19,23 @@ namespace latinime { void WordProperty::outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) const { jbooleanArray outFlags, jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilities, jobject outShortcutTargets, jobject outShortcutProbabilities) const { env->SetIntArrayRegion(outCodePoints, 0 /* start */, mCodePoints.size(), &mCodePoints[0]); jboolean flags[] = {mIsNotAWord, mIsBlacklisted, mHasBigrams, mHasShortcuts}; env->SetBooleanArrayRegion(outFlags, 0 /* start */, NELEMS(flags), flags); env->SetIntArrayRegion(outProbability, 0 /* start */, 1 /* len */, &mProbability); int historicalInfo[] = {mTimestamp, mLevel, mCount}; env->SetIntArrayRegion(outHistoricalInfo, 0 /* start */, NELEMS(historicalInfo), historicalInfo); int probabilityInfo[] = {mProbability, mTimestamp, mLevel, mCount}; env->SetIntArrayRegion(outProbabilityInfo, 0 /* start */, NELEMS(probabilityInfo), probabilityInfo); jclass integerClass = env->FindClass("java/lang/Integer"); jmethodID intToIntegerConstructorId = env->GetMethodID(integerClass, "<init>", "(I)V"); jclass arrayListClass = env->FindClass("java/util/ArrayList"); jmethodID addMethodId = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // TODO: Output bigrams. // Output shortcuts. const int shortcutTargetCount = mShortcuts.size(); for (int i = 0; i < shortcutTargetCount; ++i) { const std::vector<int> *const targetCodePoints = mShortcuts[i].getTargetCodePoints(); Loading
native/jni/src/suggest/core/dictionary/word_property.h +2 −2 Original line number Diff line number Diff line Loading @@ -78,8 +78,8 @@ class WordProperty { mShortcuts(*shortcuts) {} void outputProperties(JNIEnv *const env, jintArray outCodePoints, jbooleanArray outFlags, jintArray outProbability, jintArray outHistoricalInfo, jobject outShortcutTargets, jobject outShortcutProbabilities) const; jintArray outProbabilityInfo, jobject outBigramTargets, jobject outBigramProbabilities, jobject outShortcutTargets, jobject outShortcutProbabilities) const; private: DISALLOW_ASSIGNMENT_OPERATOR(WordProperty); Loading