]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/engine/Index.java
Run automated code cleanup.
[Dictionary.git] / src / com / hughes / android / dictionary / engine / Index.java
index 99cdb54a7be407167e90bd0d69ee03222feb8d28..ea0de2528d2aa76fe5d951e649b47ecb4db71916 100644 (file)
@@ -194,7 +194,7 @@ public final class Index implements RAFSerializable<Index> {
         public void write(DataOutput raf, IndexEntry t) throws IOException {
             t.write(raf);
         }
-    };
+    }
 
     public static final class IndexEntry implements RAFSerializable<Index.IndexEntry> {
         public final String token;
@@ -305,6 +305,20 @@ public final class Index implements RAFSerializable<Index> {
         return NormalizeComparator.compareWithoutDash(token, entry.normalizedToken(), sortCollator, dict.dictFileVersion);
     }
 
+    private int findMatchLen(final Comparator sortCollator, String a, String b) {
+        int start = 0;
+        int end = Math.min(a.length(), b.length());
+        while (start < end)
+        {
+            int mid = (start + end + 1) / 2;
+            if (sortCollator.compare(a.substring(0, mid), b.substring(0, mid)) == 0)
+                start = mid;
+            else
+                end = mid - 1;
+        }
+        return start;
+    }
+
     public int findInsertionPointIndex(String token, final AtomicBoolean interrupted) {
         token = normalizeToken(token);
 
@@ -352,6 +366,15 @@ public final class Index implements RAFSerializable<Index> {
             }
         }
 
+        // if the word before is the better match, move
+        // our result to it
+        if (start > 0 && start < sortedIndexEntries.size()) {
+            String prev = sortedIndexEntries.get(start - 1).normalizedToken();
+            String next = sortedIndexEntries.get(start).normalizedToken();
+            if (findMatchLen(sortCollator, token, prev) >= findMatchLen(sortCollator, token, next))
+                start--;
+        }
+
         // If we search for a substring of a string that's in there, return
         // that.
         int result = Math.min(start, sortedIndexEntries.size() - 1);