Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6870cc8 authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Remove BinaryDictionary.MAX_PREDICTION and MAX_SPACES, and rename MAX_WORDS to MAX_RESULTS

Change-Id: Iab2a422b367e7521f346481c7fe5e2575f2e9de3
parent d8590857
Loading
Loading
Loading
Loading
+10 −19
Original line number Diff line number Diff line
@@ -42,17 +42,13 @@ public final class BinaryDictionary extends Dictionary {
     * really long words.
     */
    private static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH;
    private static final int MAX_WORDS = 18;
    private static final int MAX_SPACES = 16;

    private static final int MAX_PREDICTIONS = 60;
    private static final int MAX_RESULTS = Math.max(MAX_PREDICTIONS, MAX_WORDS);
    private static final int MAX_RESULTS = 18; /* Must be identical to MAX_RESULTS in defines.h */

    private long mNativeDict;
    private final Locale mLocale;
    private final int[] mInputCodePoints = new int[MAX_WORD_LENGTH];
    private final int[] mOutputCodePoints = new int[MAX_WORD_LENGTH * MAX_RESULTS];
    private final int[] mSpaceIndices = new int[MAX_SPACES];
    private final int[] mSpaceIndices = new int[MAX_RESULTS];
    private final int[] mOutputScores = new int[MAX_RESULTS];
    private final int[] mOutputTypes = new int[MAX_RESULTS];

@@ -80,16 +76,14 @@ public final class BinaryDictionary extends Dictionary {
    /**
     * Constructor for the binary dictionary. This is supposed to be called from the
     * dictionary factory.
     * @param context the context to access the environment from.
     * @param filename the name of the file to read through native code.
     * @param offset the offset of the dictionary data within the file.
     * @param length the length of the binary data.
     * @param useFullEditDistance whether to use the full edit distance in suggestions
     * @param dictType the dictionary type, as a human-readable string
     */
    public BinaryDictionary(final Context context, final String filename, final long offset,
            final long length, final boolean useFullEditDistance, final Locale locale,
            final String dictType) {
    public BinaryDictionary(final String filename, final long offset, final long length,
            final boolean useFullEditDistance, final Locale locale, final String dictType) {
        super(dictType);
        mLocale = locale;
        mUseFullEditDistance = useFullEditDistance;
@@ -101,7 +95,7 @@ public final class BinaryDictionary extends Dictionary {
    }

    private native long openNative(String sourceDir, long dictOffset, long dictSize,
            int maxWordLength, int maxWords, int maxPredictions);
            int maxWordLength);
    private native void closeNative(long dict);
    private native int getFrequencyNative(long dict, int[] word);
    private native boolean isValidBigramNative(long dict, int[] word1, int[] word2);
@@ -116,8 +110,7 @@ public final class BinaryDictionary extends Dictionary {
    // TODO: Move native dict into session
    private final void loadDictionary(final String path, final long startOffset,
            final long length) {
        mNativeDict = openNative(path, startOffset, length, MAX_WORD_LENGTH, MAX_WORDS,
                MAX_PREDICTIONS);
        mNativeDict = openNative(path, startOffset, length, MAX_WORD_LENGTH);
    }

    @Override
@@ -148,14 +141,12 @@ public final class BinaryDictionary extends Dictionary {
        final InputPointers ips = composer.getInputPointers();
        final int codesSize = isGesture ? ips.getPointerSize() : composerSize;
        // proximityInfo and/or prevWordForBigrams may not be null.
        final int tmpCount = getSuggestionsNative(mNativeDict,
                proximityInfo.getNativeProximityInfo(), getTraverseSession(sessionId).getSession(),
                ips.getXCoordinates(), ips.getYCoordinates(), ips.getTimes(), ips.getPointerIds(),
                mInputCodePoints, codesSize, 0 /* commitPoint */, isGesture, prevWordCodePointArray,
        final int count = getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(),
                getTraverseSession(sessionId).getSession(), ips.getXCoordinates(),
                ips.getYCoordinates(), ips.getTimes(), ips.getPointerIds(), mInputCodePoints,
                codesSize, 0 /* commitPoint */, isGesture, prevWordCodePointArray,
                mUseFullEditDistance, mOutputCodePoints, mOutputScores, mSpaceIndices,
                mOutputTypes);
        final int count = Math.min(tmpCount, MAX_PREDICTIONS);

        final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
        for (int j = 0; j < count; ++j) {
            if (composerSize > 0 && mOutputScores[j] < 1) break;
+6 −8
Original line number Diff line number Diff line
@@ -58,9 +58,8 @@ public final class DictionaryFactory {
                BinaryDictionaryGetter.getDictionaryFiles(locale, context);
        if (null != assetFileList) {
            for (final AssetFileAddress f : assetFileList) {
                final BinaryDictionary binaryDictionary =
                        new BinaryDictionary(context, f.mFilename, f.mOffset, f.mLength,
                                useFullEditDistance, locale, Dictionary.TYPE_MAIN);
                final BinaryDictionary binaryDictionary = new BinaryDictionary(f.mFilename,
                        f.mOffset, f.mLength, useFullEditDistance, locale, Dictionary.TYPE_MAIN);
                if (binaryDictionary.isValidDictionary()) {
                    dictList.add(binaryDictionary);
                }
@@ -112,7 +111,7 @@ public final class DictionaryFactory {
                Log.e(TAG, "sourceDir is not a file: " + sourceDir);
                return null;
            }
            return new BinaryDictionary(context, sourceDir, afd.getStartOffset(), afd.getLength(),
            return new BinaryDictionary(sourceDir, afd.getStartOffset(), afd.getLength(),
                    false /* useFullEditDistance */, locale, Dictionary.TYPE_MAIN);
        } catch (android.content.res.Resources.NotFoundException e) {
            Log.e(TAG, "Could not find the resource");
@@ -130,17 +129,16 @@ public final class DictionaryFactory {

    /**
     * Create a dictionary from passed data. This is intended for unit tests only.
     * @param context the test context to create this data from.
     * @param dictionary the file to read
     * @param startOffset the offset in the file where the data starts
     * @param length the length of the data
     * @param useFullEditDistance whether to use the full edit distance in suggestions
     * @return the created dictionary, or null.
     */
    public static Dictionary createDictionaryForTest(Context context, File dictionary,
            long startOffset, long length, final boolean useFullEditDistance, Locale locale) {
    public static Dictionary createDictionaryForTest(File dictionary, long startOffset, long length,
            final boolean useFullEditDistance, Locale locale) {
        if (dictionary.isFile()) {
            return new BinaryDictionary(context, dictionary.getAbsolutePath(), startOffset, length,
            return new BinaryDictionary(dictionary.getAbsolutePath(), startOffset, length,
                    useFullEditDistance, locale, Dictionary.TYPE_MAIN);
        } else {
            Log.e(TAG, "Could not find the file. path=" + dictionary.getAbsolutePath());
+2 −3
Original line number Diff line number Diff line
@@ -279,9 +279,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
        final long length = file.length();

        // Build the new binary dictionary
        final BinaryDictionary newBinaryDictionary =
                new BinaryDictionary(mContext, filename, 0, length, true /* useFullEditDistance */,
                        null, mDictType);
        final BinaryDictionary newBinaryDictionary = new BinaryDictionary(filename, 0, length,
                true /* useFullEditDistance */, null, mDictType);

        if (mBinaryDictionary != null) {
            // Ensure all threads accessing the current dictionary have finished before swapping in
+2 −3
Original line number Diff line number Diff line
@@ -72,9 +72,8 @@ public final class Suggest {
    }

    @UsedForTesting
    Suggest(final Context context, final File dictionary,
            final long startOffset, final long length, final Locale locale) {
        final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(context, dictionary,
    Suggest(final File dictionary, final long startOffset, final long length, final Locale locale) {
        final Dictionary mainDict = DictionaryFactory.createDictionaryForTest(dictionary,
                startOffset, length /* useFullEditDistance */, false, locale);
        mLocale = locale;
        mMainDictionary = mainDict;
+11 −4
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ class ProximityInfo;
static void releaseDictBuf(const void *dictBuf, const size_t length, const int fd);

static jlong latinime_BinaryDictionary_open(JNIEnv *env, jobject object, jstring sourceDir,
        jlong dictOffset, jlong dictSize, jint maxWordLength, jint maxWords, jint maxPredictions) {
        jlong dictOffset, jlong dictSize, jint maxWordLength) {
    PROF_OPEN;
    PROF_START(66);
    const jsize sourceDirUtf8Length = env->GetStringUTFLength(sourceDir);
@@ -117,8 +117,7 @@ static jlong latinime_BinaryDictionary_open(JNIEnv *env, jobject object, jstring
        releaseDictBuf(dictBuf, 0, 0);
#endif // USE_MMAP_FOR_DICTIONARY
    } else {
        dictionary = new Dictionary(dictBuf, static_cast<int>(dictSize), fd, adjust, maxWordLength,
                maxWords, maxPredictions);
        dictionary = new Dictionary(dictBuf, static_cast<int>(dictSize), fd, adjust, maxWordLength);
    }
    PROF_END(66);
    PROF_CLOSE;
@@ -163,6 +162,14 @@ static int latinime_BinaryDictionary_getSuggestions(JNIEnv *env, jobject object,
    const jsize outputCodePointsLength = env->GetArrayLength(outputCodePointsArray);
    int outputCodePoints[outputCodePointsLength];
    const jsize scoresLength = env->GetArrayLength(scoresArray);

    /* By the way, let's check the output array length here to make sure */
    if (scoresLength < MAX_RESULTS) {
        ASSERT(false);
        return 0;
    }

    // Cont'd: Output values
    int scores[scoresLength];
    const jsize spaceIndicesLength = env->GetArrayLength(spaceIndicesArray);
    int spaceIndices[spaceIndicesLength];
@@ -270,7 +277,7 @@ static void releaseDictBuf(const void *dictBuf, const size_t length, const int f
}

static JNINativeMethod sMethods[] = {
    {"openNative", "(Ljava/lang/String;JJIII)J",
    {"openNative", "(Ljava/lang/String;JJI)J",
            reinterpret_cast<void *>(latinime_BinaryDictionary_open)},
    {"closeNative", "(J)V", reinterpret_cast<void *>(latinime_BinaryDictionary_close)},
    {"getSuggestionsNative", "(JJJ[I[I[I[I[IIIZ[IZ[I[I[I[I)I",
Loading