Return-Path: X-Original-To: apmail-commons-commits-archive@minotaur.apache.org Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 03668106BF for ; Thu, 7 Nov 2013 20:11:49 +0000 (UTC) Received: (qmail 38392 invoked by uid 500); 7 Nov 2013 20:11:48 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 38332 invoked by uid 500); 7 Nov 2013 20:11:48 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 38325 invoked by uid 99); 7 Nov 2013 20:11:48 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Nov 2013 20:11:48 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Nov 2013 20:11:45 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id CD6A823889CB; Thu, 7 Nov 2013 20:11:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1539788 - in /commons/proper/codec/trunk/src: main/java/org/apache/commons/codec/language/bm/ test/java/org/apache/commons/codec/language/bm/ Date: Thu, 07 Nov 2013 20:11:23 -0000 To: commits@commons.apache.org From: ggregory@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131107201123.CD6A823889CB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: ggregory Date: Thu Nov 7 20:11:23 2013 New Revision: 1539788 URL: http://svn.apache.org/r1539788 Log: [CODEC-174] Apply patch https://issues.apache.org/jira/secure/attachment/12612178/CODEC-174-reuse-set-in-PhonemeBuilder.patch. Thanks to Thomas Champagne. Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/PhoneticEngine.java commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/Rule.java commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/PhoneticEnginePerformanceTest.java commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/RuleTest.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=1539788&r1=1539787&r2=1539788&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 Thu Nov 7 20:11:23 2013 @@ -66,12 +66,17 @@ public class PhoneticEngine { * @return a new, empty phoneme builder */ public static PhonemeBuilder empty(final Languages.LanguageSet languages) { - return new PhonemeBuilder(Collections.singleton(new Rule.Phoneme("", languages))); + return new PhonemeBuilder(new Rule.Phoneme("", languages)); } private final Set phonemes; - private PhonemeBuilder(final Set phonemes) { + private PhonemeBuilder(Rule.Phoneme phoneme) { + this.phonemes = new LinkedHashSet(); + this.phonemes.add(phoneme); + } + + private PhonemeBuilder(Set phonemes) { this.phonemes = phonemes; } @@ -81,14 +86,10 @@ public class PhoneticEngine { * @param str the characters to append to the phonemes * @return a new phoneme builder lenghtened by str */ - public PhonemeBuilder append(final CharSequence str) { - final Set newPhonemes = new LinkedHashSet(); - + public void append(final CharSequence str) { for (final Rule.Phoneme ph : this.phonemes) { - newPhonemes.add(ph.append(str)); + ph.append(str); } - - return new PhonemeBuilder(newPhonemes); } /** @@ -380,7 +381,7 @@ public class PhoneticEngine { if (!found) { // not found, appending as-is - subBuilder = subBuilder.append(phonemeText.subSequence(i, i + 1)); + subBuilder.append(phonemeText.subSequence(i, i + 1)); } i = rulesApplication.getI(); Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/Rule.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/Rule.java?rev=1539788&r1=1539787&r2=1539788&view=diff ============================================================================== --- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/Rule.java (original) +++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/language/bm/Rule.java Thu Nov 7 20:11:23 2013 @@ -101,16 +101,22 @@ public class Rule { } }; - private final CharSequence phonemeText; + private final StringBuilder phonemeText; private final Languages.LanguageSet languages; public Phoneme(final CharSequence phonemeText, final Languages.LanguageSet languages) { - this.phonemeText = phonemeText; + this.phonemeText = new StringBuilder(phonemeText); this.languages = languages; } + + public Phoneme(final Phoneme phonemeLeft, final Phoneme phonemeRight) { + this.phonemeText = new StringBuilder(phonemeLeft.phonemeText); + this.phonemeText.append(phonemeRight.phonemeText); + this.languages = phonemeLeft.languages; + } - public Phoneme append(final CharSequence str) { - return new Phoneme(this.phonemeText.toString() + str.toString(), this.languages); + public void append(final CharSequence str) { + this.phonemeText.append(str); } public Languages.LanguageSet getLanguages() { Modified: commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/PhoneticEnginePerformanceTest.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/PhoneticEnginePerformanceTest.java?rev=1539788&r1=1539787&r2=1539788&view=diff ============================================================================== --- commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/PhoneticEnginePerformanceTest.java (original) +++ commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/PhoneticEnginePerformanceTest.java Thu Nov 7 20:11:23 2013 @@ -76,6 +76,22 @@ import org.junit.Test; *

* Patch not applied. *

+ *

+ * On this file's revision 1539787, with patch CODEC-174-reuse-set-in-PhonemeBuilder.patch: + *

+ *
    + *
  1. Time for encoding 80,000 times the input 'Angelo': 13,724 millis.
  2. + *
  3. Time for encoding 80,000 times the input 'Angelo': 13,451 millis.
  4. + *
  5. Time for encoding 80,000 times the input 'Angelo': 13,742 millis.
  6. + *
  7. Time for encoding 80,000 times the input 'Angelo': 13,186 millis.
  8. + *
  9. Time for encoding 80,000 times the input 'Angelo': 13,600 millis.
  10. + *
  11. Time for encoding 80,000 times the input 'Angelo': 16,405 millis.
  12. + *
+ *

+ * + *

*/ public class PhoneticEnginePerformanceTest { Modified: commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/RuleTest.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/RuleTest.java?rev=1539788&r1=1539787&r2=1539788&view=diff ============================================================================== --- commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/RuleTest.java (original) +++ commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/language/bm/RuleTest.java Thu Nov 7 20:11:23 2013 @@ -107,14 +107,14 @@ public class RuleTest { assertEquals('k', jkl.getPhonemeText().charAt(1)); assertEquals('l', jkl.getPhonemeText().charAt(2)); - final Rule.Phoneme a_b = a.append(b.getPhonemeText()); + final Rule.Phoneme a_b = new Rule.Phoneme(a, b); assertEquals('a', a_b.getPhonemeText().charAt(0)); assertEquals('b', a_b.getPhonemeText().charAt(1)); assertEquals("ab", a_b.getPhonemeText().subSequence(0, 2).toString()); assertEquals("a", a_b.getPhonemeText().subSequence(0, 1).toString()); assertEquals("b", a_b.getPhonemeText().subSequence(1, 2).toString()); - final Rule.Phoneme cd_ef = cd.append(ef.getPhonemeText()); + final Rule.Phoneme cd_ef = new Rule.Phoneme(cd, ef); assertEquals('c', cd_ef.getPhonemeText().charAt(0)); assertEquals('d', cd_ef.getPhonemeText().charAt(1)); assertEquals('e', cd_ef.getPhonemeText().charAt(2)); @@ -130,7 +130,7 @@ public class RuleTest { assertEquals("def", cd_ef.getPhonemeText().subSequence(1, 4).toString()); assertEquals("cdef", cd_ef.getPhonemeText().subSequence(0, 4).toString()); - final Rule.Phoneme a_b_cd = a.append(b.getPhonemeText()).append(cd.getPhonemeText()); + final Rule.Phoneme a_b_cd = new Rule.Phoneme(new Rule.Phoneme(a, b), cd); assertEquals('a', a_b_cd.getPhonemeText().charAt(0)); assertEquals('b', a_b_cd.getPhonemeText().charAt(1)); assertEquals('c', a_b_cd.getPhonemeText().charAt(2));