Author: tn
Date: Sun Nov 17 21:34:44 2013
New Revision: 1542831

URL: http://svn.apache.org/r1542831
Log:
[CODEC-174] Improve PhonemeBuilder.apply by updating the internal state instead 
of creating a new PhonemeBuilder each time.

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=1542831&r1=1542830&r2=1542831&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
 Sun Nov 17 21:34:44 2013
@@ -95,34 +95,34 @@ public class PhoneticEngine {
         }
 
         /**
-         * Creates a new phoneme builder containing the application of the 
expression to all phonemes in this builder.
+         * Applies the given phoneme expression to all phonemes in this 
phoneme builder.
          * <p>
          * This will lengthen phonemes that have compatible language sets to 
the expression, and drop those that are
          * incompatible.
          *
          * @param phonemeExpr   the expression to apply
          * @param maxPhonemes   the maximum number of phonemes to build up
-         * @return  a new phoneme builder containing the results of 
<code>phonemeExpr</code> applied to each phoneme
-         *      in turn
          */
-        public PhonemeBuilder apply(final Rule.PhonemeExpr phonemeExpr, final 
int maxPhonemes) {
-            final Set<Rule.Phoneme> newPhonemes = new 
LinkedHashSet<Rule.Phoneme>();
+        public void apply(final Rule.PhonemeExpr phonemeExpr, final int 
maxPhonemes) {
+            final List<Rule.Phoneme> newPhonemes = new 
ArrayList<Rule.Phoneme>(maxPhonemes);
 
             EXPR: for (final Rule.Phoneme left : this.phonemes) {
                 for (final Rule.Phoneme right : phonemeExpr.getPhonemes()) {
-                    LanguageSet languages = 
left.getLanguages().restrictTo(right.getLanguages());
+                    final LanguageSet languages = 
left.getLanguages().restrictTo(right.getLanguages());
                     if (!languages.isEmpty()) {
                         final Rule.Phoneme join = new Phoneme(left, right, 
languages);
                         if (newPhonemes.size() < maxPhonemes) {
                             newPhonemes.add(join);
-                        } else {
-                            break EXPR;
+                            if (newPhonemes.size() >= maxPhonemes) {
+                                break EXPR;
+                            }
                         }
                     }
                 }
             }
 
-            return new PhonemeBuilder(newPhonemes);
+            this.phonemes.clear();
+            this.phonemes.addAll(newPhonemes);
         }
 
         /**
@@ -212,7 +212,7 @@ public class PhoneticEngine {
                     final String pattern = rule.getPattern();
                     patternLength = pattern.length();
                     if (rule.patternAndContextMatches(this.input, this.i)) {
-                        this.phonemeBuilder = 
this.phonemeBuilder.apply(rule.getPhoneme(), maxPhonemes);
+                        this.phonemeBuilder.apply(rule.getPhoneme(), 
maxPhonemes);
                         this.found = true;
                         break;
                     }


Reply via email to