Use PrevWordsInfo.getPrevWordCount() in Java side.

Bug: 14425059
Change-Id: Ie6295ff657c483876af403f2d474b7d857e5e3d6
This commit is contained in:
Keisuke Kuroyanagi 2014-09-17 22:04:25 +09:00
parent b349b57476
commit 4466464c24
2 changed files with 18 additions and 20 deletions

View file

@ -358,9 +358,8 @@ public final class BinaryDictionary extends Dictionary {
if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
return NOT_A_PROBABILITY; return NOT_A_PROBABILITY;
} }
final int[][] prevWordCodePointArrays = new int[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM][]; final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][];
final boolean[] isBeginningOfSentenceArray = final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()];
new boolean[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM];
prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray);
final int[] wordCodePoints = StringUtils.toCodePointArray(word); final int[] wordCodePoints = StringUtils.toCodePointArray(word);
return getNgramProbabilityNative(mNativeDict, prevWordCodePointArrays, return getNgramProbabilityNative(mNativeDict, prevWordCodePointArrays,
@ -455,9 +454,8 @@ public final class BinaryDictionary extends Dictionary {
if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
return false; return false;
} }
final int[][] prevWordCodePointArrays = new int[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM][]; final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][];
final boolean[] isBeginningOfSentenceArray = final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()];
new boolean[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM];
prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray);
final int[] wordCodePoints = StringUtils.toCodePointArray(word); final int[] wordCodePoints = StringUtils.toCodePointArray(word);
if (!addNgramEntryNative(mNativeDict, prevWordCodePointArrays, if (!addNgramEntryNative(mNativeDict, prevWordCodePointArrays,
@ -473,9 +471,8 @@ public final class BinaryDictionary extends Dictionary {
if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) { if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
return false; return false;
} }
final int[][] prevWordCodePointArrays = new int[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM][]; final int[][] prevWordCodePointArrays = new int[prevWordsInfo.getPrevWordCount()][];
final boolean[] isBeginningOfSentenceArray = final boolean[] isBeginningOfSentenceArray = new boolean[prevWordsInfo.getPrevWordCount()];
new boolean[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM];
prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray); prevWordsInfo.outputToArray(prevWordCodePointArrays, isBeginningOfSentenceArray);
final int[] wordCodePoints = StringUtils.toCodePointArray(word); final int[] wordCodePoints = StringUtils.toCodePointArray(word);
if (!removeNgramEntryNative(mNativeDict, prevWordCodePointArrays, if (!removeNgramEntryNative(mNativeDict, prevWordCodePointArrays,

View file

@ -86,33 +86,30 @@ public class PrevWordsInfo {
// For simplicity of implementation, elements may also be EMPTY_WORD_INFO transiently after the // For simplicity of implementation, elements may also be EMPTY_WORD_INFO transiently after the
// WordComposer was reset and before starting a new composing word, but we should never be // WordComposer was reset and before starting a new composing word, but we should never be
// calling getSuggetions* in this situation. // calling getSuggetions* in this situation.
public WordInfo[] mPrevWordsInfo = new WordInfo[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM]; public final WordInfo[] mPrevWordsInfo;
// Construct from the previous word information. // Construct from the previous word information.
public PrevWordsInfo(final WordInfo prevWordInfo) { public PrevWordsInfo(final WordInfo prevWordInfo) {
mPrevWordsInfo[0] = prevWordInfo; mPrevWordsInfo = new WordInfo[] { prevWordInfo };
} }
// Construct from WordInfo array. n-th element represents (n+1)-th previous word's information. // Construct from WordInfo array. n-th element represents (n+1)-th previous word's information.
public PrevWordsInfo(final WordInfo[] prevWordsInfo) { public PrevWordsInfo(final WordInfo[] prevWordsInfo) {
for (int i = 0; i < Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM; i++) { mPrevWordsInfo = prevWordsInfo;
mPrevWordsInfo[i] =
(prevWordsInfo.length > i) ? prevWordsInfo[i] : WordInfo.EMPTY_WORD_INFO;
}
} }
// Create next prevWordsInfo using current prevWordsInfo. // Create next prevWordsInfo using current prevWordsInfo.
public PrevWordsInfo getNextPrevWordsInfo(final WordInfo wordInfo) { public PrevWordsInfo getNextPrevWordsInfo(final WordInfo wordInfo) {
final WordInfo[] prevWordsInfo = new WordInfo[Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM]; final int nextPrevWordCount = Math.min(Constants.MAX_PREV_WORD_COUNT_FOR_N_GRAM,
mPrevWordsInfo.length + 1);
final WordInfo[] prevWordsInfo = new WordInfo[nextPrevWordCount];
prevWordsInfo[0] = wordInfo; prevWordsInfo[0] = wordInfo;
for (int i = 1; i < prevWordsInfo.length; i++) { System.arraycopy(mPrevWordsInfo, 0, prevWordsInfo, 1, prevWordsInfo.length - 1);
prevWordsInfo[i] = mPrevWordsInfo[i - 1];
}
return new PrevWordsInfo(prevWordsInfo); return new PrevWordsInfo(prevWordsInfo);
} }
public boolean isValid() { public boolean isValid() {
return mPrevWordsInfo[0].isValid(); return mPrevWordsInfo.length > 0 && mPrevWordsInfo[0].isValid();
} }
public void outputToArray(final int[][] codePointArrays, public void outputToArray(final int[][] codePointArrays,
@ -129,6 +126,10 @@ public class PrevWordsInfo {
} }
} }
public int getPrevWordCount() {
return mPrevWordsInfo.length;
}
@Override @Override
public int hashCode() { public int hashCode() {
return Arrays.hashCode(mPrevWordsInfo); return Arrays.hashCode(mPrevWordsInfo);