]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
Allow caching normalization step of comparator.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Wed, 15 Apr 2020 20:18:40 +0000 (22:18 +0200)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Wed, 15 Apr 2020 20:51:21 +0000 (22:51 +0200)
src/com/hughes/android/dictionary/engine/FastCompareString.java [new file with mode: 0644]
src/com/hughes/android/dictionary/engine/FastNormalizeComparator.java [new file with mode: 0644]
src/com/hughes/android/dictionary/engine/NormalizeComparator.java

diff --git a/src/com/hughes/android/dictionary/engine/FastCompareString.java b/src/com/hughes/android/dictionary/engine/FastCompareString.java
new file mode 100644 (file)
index 0000000..6b37f97
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright 2020 Reimar Döffinger. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.hughes.android.dictionary.engine;
+
+public class FastCompareString {
+    public final String s;
+    public String n;
+
+    FastCompareString(String s) {
+        this.s = s;
+    }
+}
diff --git a/src/com/hughes/android/dictionary/engine/FastNormalizeComparator.java b/src/com/hughes/android/dictionary/engine/FastNormalizeComparator.java
new file mode 100644 (file)
index 0000000..2bb8183
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2020 Reimar Döffinger. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.hughes.android.dictionary.engine;
+
+import java.util.Comparator;
+
+public class FastNormalizeComparator implements Comparator<FastCompareString> {
+    private final NormalizeComparator c;
+
+    FastNormalizeComparator(NormalizeComparator c) {
+        this.c = c;
+    }
+
+    @Override
+    public int compare(FastCompareString a, FastCompareString b) {
+        if (a.n == null) a.n = c.normalize(a.s);
+        if (b.n == null) b.n = c.normalize(b.s);
+        return c.compareNormalized(a.s, b.s, a.n, b.n);
+    }
+}
index 9283c36dc45ef675b5564bf58ebe6d64ed9e8ffc..fcd7fc27a95857d201a11790ac642be70fed797e 100644 (file)
@@ -44,10 +44,11 @@ public class NormalizeComparator implements Comparator<String> {
         return c.compare(s1, s2);
     }
 
         return c.compare(s1, s2);
     }
 
-    @Override
-    public int compare(final String s1, final String s2) {
-        final String n1 = normalizer == null ? s1.toLowerCase() : normalizer.transform(s1);
-        final String n2 = normalizer == null ? s2.toLowerCase() : normalizer.transform(s2);
+    public String normalize(String s) {
+        return normalizer == null ? s.toLowerCase() : normalizer.transform(s);
+    }
+
+    public int compareNormalized(final String s1, final String s2, final String n1, final String n2) {
         int cn = compareWithoutDash(n1, n2, comparator, version);
         if (cn != 0) {
             return cn;
         int cn = compareWithoutDash(n1, n2, comparator, version);
         if (cn != 0) {
             return cn;
@@ -59,4 +60,11 @@ public class NormalizeComparator implements Comparator<String> {
         return comparator.compare(s1, s2);
     }
 
         return comparator.compare(s1, s2);
     }
 
+    @Override
+    public int compare(final String s1, final String s2) {
+        final String n1 = normalize(s1);
+        final String n2 = normalize(s2);
+        return compareNormalized(s1, s2, n1, n2);
+    }
+
 }
 }