Skip to content

Commit b91f50f

Browse files
committed
[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.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/codec/trunk@1541231 13f79535-47bb-0310-9956-ffa450edef68
1 parent 1e531f7 commit b91f50f

1 file changed

Lines changed: 3 additions & 40 deletions

File tree

src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -244,42 +244,6 @@ public boolean isFound() {
244244
"des", "di", "do", "dos", "du", "van", "von"))));
245245
}
246246

247-
/**
248-
* This is a performance hack to avoid overhead associated with very frequent CharSequence.subSequence calls.
249-
*
250-
* @param cached the character sequence to cache
251-
* @return a <code>CharSequence</code> that internally caches subSequence values
252-
*/
253-
private static CharSequence cacheSubSequence(final CharSequence cached) {
254-
// return cached;
255-
final CharSequence[][] cache = new CharSequence[cached.length()][cached.length()];
256-
return new CharSequence() {
257-
@Override
258-
public char charAt(final int index) {
259-
return cached.charAt(index);
260-
}
261-
262-
@Override
263-
public int length() {
264-
return cached.length();
265-
}
266-
267-
@Override
268-
public CharSequence subSequence(final int start, final int end) {
269-
if (start == end) {
270-
return "";
271-
}
272-
273-
CharSequence res = cache[start][end - 1];
274-
if (res == null) {
275-
res = cached.subSequence(start, end);
276-
cache[start][end - 1] = res;
277-
}
278-
return res;
279-
}
280-
};
281-
}
282-
283247
/**
284248
* Joins some strings with an internal separator.
285249
* @param strings Strings to join
@@ -370,7 +334,7 @@ private PhonemeBuilder applyFinalRules(final PhonemeBuilder phonemeBuilder, fina
370334

371335
for (final Rule.Phoneme phoneme : phonemeBuilder.getPhonemes()) {
372336
PhonemeBuilder subBuilder = PhonemeBuilder.empty(phoneme.getLanguages());
373-
final CharSequence phonemeText = cacheSubSequence(phoneme.getPhonemeText());
337+
final String phonemeText = phoneme.getPhonemeText().toString();
374338

375339
for (int i = 0; i < phonemeText.length();) {
376340
final RulesApplication rulesApplication =
@@ -484,10 +448,9 @@ public String encode(String input, final Languages.LanguageSet languageSet) {
484448
PhonemeBuilder phonemeBuilder = PhonemeBuilder.empty(languageSet);
485449

486450
// loop over each char in the input - we will handle the increment manually
487-
final CharSequence inputCache = cacheSubSequence(input);
488-
for (int i = 0; i < inputCache.length();) {
451+
for (int i = 0; i < input.length();) {
489452
final RulesApplication rulesApplication =
490-
new RulesApplication(rules, inputCache, phonemeBuilder, i, maxPhonemes).invoke();
453+
new RulesApplication(rules, input, phonemeBuilder, i, maxPhonemes).invoke();
491454
i = rulesApplication.getI();
492455
phonemeBuilder = rulesApplication.getPhonemeBuilder();
493456
}

0 commit comments

Comments
 (0)