From: Reimar Döffinger Date: Wed, 15 Apr 2020 20:18:40 +0000 (+0200) Subject: Allow caching normalization step of comparator. X-Git-Url: http://gitweb.fperrin.net/?p=Dictionary.git;a=commitdiff_plain;h=8db35e07360770a25ba1560acd645292e591ebb5 Allow caching normalization step of comparator. --- diff --git a/src/com/hughes/android/dictionary/engine/FastCompareString.java b/src/com/hughes/android/dictionary/engine/FastCompareString.java new file mode 100644 index 0000000..6b37f97 --- /dev/null +++ b/src/com/hughes/android/dictionary/engine/FastCompareString.java @@ -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 index 0000000..2bb8183 --- /dev/null +++ b/src/com/hughes/android/dictionary/engine/FastNormalizeComparator.java @@ -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 { + 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); + } +} diff --git a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java index 9283c36..fcd7fc2 100644 --- a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java +++ b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java @@ -44,10 +44,11 @@ public class NormalizeComparator implements Comparator { 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; @@ -59,4 +60,11 @@ public class NormalizeComparator implements Comparator { 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); + } + }