diff options
author | 2012-04-25 18:49:31 +0900 | |
---|---|---|
committer | 2012-04-26 16:40:29 +0900 | |
commit | 20a6dea1cabfd8822824f7dca828d898e5b91cbc (patch) | |
tree | 8d240b92bd08af04bb5cbc773e691f67658e4d0c /java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java | |
parent | 329c8d7bcce4f785fa6e31df6cbda0c11014d49b (diff) | |
download | latinime-20a6dea1cabfd8822824f7dca828d898e5b91cbc.tar.gz latinime-20a6dea1cabfd8822824f7dca828d898e5b91cbc.tar.xz latinime-20a6dea1cabfd8822824f7dca828d898e5b91cbc.zip |
Add a flag for bigram presence in the header
This is a cherry-pick of Icb602762 onto jb-dev.
Bug: 6355745
Change-Id: Icb602762bb0d81472f024fa491571062ec1fc4e9
Diffstat (limited to 'java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java index c293b2ba4..b08702e47 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java +++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java @@ -563,7 +563,7 @@ public class FusionDictionary implements Iterable<Word> { * Recursively count the number of nodes in a given branch of the trie. * * @param node the node to count. - * @result the number of nodes in this branch. + * @return the number of nodes in this branch. */ public static int countNodes(final Node node) { int size = 1; @@ -575,6 +575,32 @@ public class FusionDictionary implements Iterable<Word> { return size; } + // Recursively find out whether there are any bigrams. + // This can be pretty expensive especially if there aren't any (we return as soon + // as we find one, so it's much cheaper if there are bigrams) + private static boolean hasBigramsInternal(final Node node) { + if (null == node) return false; + for (int i = node.mData.size() - 1; i >= 0; --i) { + CharGroup group = node.mData.get(i); + if (null != group.mBigrams) return true; + if (hasBigramsInternal(group.mChildren)) return true; + } + return false; + } + + /** + * Finds out whether there are any bigrams in this dictionary. + * + * @return true if there is any bigram, false otherwise. + */ + // TODO: this is expensive especially for large dictionaries without any bigram. + // The up side is, this is always accurate and correct and uses no memory. We should + // find a more efficient way of doing this, without compromising too much on memory + // and ease of use. + public boolean hasBigrams() { + return hasBigramsInternal(mRoot); + } + // Historically, the tails of the words were going to be merged to save space. // However, that would prevent the code to search for a specific address in log(n) // time so this was abandoned. |