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();
         }


Reply via email to