Author: ggregory
Date: Tue Nov 12 20:52:33 2013
New Revision: 1541231
URL: http://svn.apache.org/r1541231
Log:
[CODEC-174] Small (2.3%) but consistent performance gain with this patch from
https://issues.apache.org/jira/secure/attachment/12612838/CODEC-174-delete-subsequence-cache-and-use-String.patch.
The nicer aspect of the patch is that it simplifies the code.
Modified:
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
Modified:
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
URL:
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java?rev=1541231&r1=1541230&r2=1541231&view=diff
==============================================================================
---
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
(original)
+++
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
Tue Nov 12 20:52:33 2013
@@ -245,42 +245,6 @@ public class PhoneticEngine {
}
/**
- * This is a performance hack to avoid overhead associated with very
frequent CharSequence.subSequence calls.
- *
- * @param cached the character sequence to cache
- * @return a <code>CharSequence</code> that internally caches subSequence
values
- */
- private static CharSequence cacheSubSequence(final CharSequence cached) {
- // return cached;
- final CharSequence[][] cache = new
CharSequence[cached.length()][cached.length()];
- return new CharSequence() {
- @Override
- public char charAt(final int index) {
- return cached.charAt(index);
- }
-
- @Override
- public int length() {
- return cached.length();
- }
-
- @Override
- public CharSequence subSequence(final int start, final int end) {
- if (start == end) {
- return "";
- }
-
- CharSequence res = cache[start][end - 1];
- if (res == null) {
- res = cached.subSequence(start, end);
- cache[start][end - 1] = res;
- }
- return res;
- }
- };
- }
-
- /**
* Joins some strings with an internal separator.
* @param strings Strings to join
* @param sep String to separate them with
@@ -370,7 +334,7 @@ public class PhoneticEngine {
for (final Rule.Phoneme phoneme : phonemeBuilder.getPhonemes()) {
PhonemeBuilder subBuilder =
PhonemeBuilder.empty(phoneme.getLanguages());
- final CharSequence phonemeText =
cacheSubSequence(phoneme.getPhonemeText());
+ final String phonemeText = phoneme.getPhonemeText().toString();
for (int i = 0; i < phonemeText.length();) {
final RulesApplication rulesApplication =
@@ -484,10 +448,9 @@ public class PhoneticEngine {
PhonemeBuilder phonemeBuilder = PhonemeBuilder.empty(languageSet);
// loop over each char in the input - we will handle the increment
manually
- final CharSequence inputCache = cacheSubSequence(input);
- for (int i = 0; i < inputCache.length();) {
+ for (int i = 0; i < input.length();) {
final RulesApplication rulesApplication =
- new RulesApplication(rules, inputCache, phonemeBuilder, i,
maxPhonemes).invoke();
+ new RulesApplication(rules, input, phonemeBuilder, i,
maxPhonemes).invoke();
i = rulesApplication.getI();
phonemeBuilder = rulesApplication.getPhonemeBuilder();
}