You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2011/01/25 17:52:08 UTC

svn commit: r1063346 - /commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/ColognePhonetic.java

Author: ggregory
Date: Tue Jan 25 16:52:08 2011
New Revision: 1063346

URL: http://svn.apache.org/viewvc?rev=1063346&view=rev
Log:
Refactor a lot common code in the left and right buffer classes into a new common superclass.

Modified:
    commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/ColognePhonetic.java

Modified: commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/ColognePhonetic.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/ColognePhonetic.java?rev=1063346&r1=1063345&r2=1063346&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/ColognePhonetic.java (original)
+++ commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/ColognePhonetic.java Tue Jan 25 16:52:08 2011
@@ -180,22 +180,18 @@ import org.apache.commons.codec.StringEn
  */
 public class ColognePhonetic implements StringEncoder {
 
-    private class CologneLeftBuffer implements CharSequence {
+    private abstract class CologneBuffer implements CharSequence {
 
-        private final char[] data;
-        private int length = 0;
+        protected final char[] data;
+        protected int length = 0;
 
-        public CologneLeftBuffer(int buffSize) {
-            data = new char[buffSize];
-        }
-
-        public CologneLeftBuffer(char[] data) {
+        public CologneBuffer(char[] data) {
             this.data = data;
             this.length = data.length;
         }
 
-        public int length() {
-            return length;
+        public CologneBuffer(int buffSize) {
+            data = new char[buffSize];
         }
 
         public char charAt(int index) {
@@ -206,33 +202,18 @@ public class ColognePhonetic implements 
             }
         }
 
-        public CharSequence subSequence(int start, int end) {
-            final int length = end - start;
-
-            char[] retData = copyData(start, length);
-
-            return new CologneLeftBuffer(retData);
-        }
-
-        private char[] copyData(int start, final int length) {
-            char[] retData = new char[length];
-
-            System.arraycopy(data, start, retData, 0, length);
-            return retData;
-        }
+        protected abstract char[] copyData(int start, final int length);
 
-        public char getLast() {
-            return data[length - 1];
-        }
+        protected abstract CologneBuffer createCologneBuffer(char[] data);
 
-        public void putRight(char chr) {
-            data[length] = chr;
-            length++;
+        public int length() {
+            return length;
         }
 
-        public char dropLast() {
-            length--;
-            return data[length];
+        public CharSequence subSequence(int start, int end) {
+            final int length = end - start;
+            char[] newData = copyData(start, length);
+            return createCologneBuffer(newData);
         }
 
         public String toString() {
@@ -240,67 +221,62 @@ public class ColognePhonetic implements 
         }
     }
 
-    private class CologneRightBuffer implements CharSequence {
+    private class CologneLeftBuffer extends CologneBuffer {
 
-        private int length = 0;
-        private final char[] data;
+        public CologneLeftBuffer(char[] data) {
+            super(data);
+        }
 
-        public CologneRightBuffer(int buffSize) {
-            data = new char[buffSize];
+        public CologneLeftBuffer(int buffSize) {
+            super(buffSize);
         }
 
-        public CologneRightBuffer(char[] data) {
-            this.data = data;
-            this.length = data.length;
+        protected char[] copyData(int start, final int length) {
+            char[] retData = new char[length];
+            System.arraycopy(data, start, retData, 0, length);
+            return retData;
         }
 
-        public int length() {
-            return length;
+        protected CologneBuffer createCologneBuffer(char[] data) {
+            return new CologneLeftBuffer(data);
         }
 
-        public char charAt(int index) {
-            if (index < length) {
-                return data[data.length - length + index];
-            } else {
-                throw new IndexOutOfBoundsException();
-            }
+        public void putRight(char chr) {
+            data[length] = chr;
+            length++;
         }
+    }
 
-        public CharSequence subSequence(int start, int end) {
-            final int length = end - start;
-            char[] newData = copyData(start, length);
+    private class CologneRightBuffer extends CologneBuffer {
 
-            return new CologneRightBuffer(newData);
+        public CologneRightBuffer(char[] data) {
+            super(data);
         }
 
-        private char[] copyData(int start, final int length) {
+        protected char[] copyData(int start, final int length) {
             char[] newData = new char[length];
-
-            System.arraycopy(data, data.length - this.length + start, newData,
-                    0, length);
+            System.arraycopy(data, data.length - this.length + start, newData, 0, length);
             return newData;
         }
 
-        public void putLeft(char chr) {
-            length++;
-            data[data.length - length] = chr;
-        }
-
-        public char getNext() {
-            return data[data.length - length];
+        protected CologneBuffer createCologneBuffer(char[] data) {
+            return new CologneRightBuffer(data);
         }
 
         public char dropNext() {
-            char ret = data[data.length - length];
+            char ch = data[data.length - length];
             length--;
-
-            return ret;
+            return ch;
         }
 
-        public String toString() {
-            return new String(copyData(0, length));
+        public char getNext() {
+            return data[data.length - length];
+        }
+        
+        public void putLeft(char ch) {
+            length++;
+            data[data.length - length] = ch;
         }
-
     }
 
     private static final char[][] PRE_REPLACEMENTS = new char[][] {
@@ -340,7 +316,6 @@ public class ColognePhonetic implements 
      * @return the corresponding encoding according to the <i>Kölner
      *         Phonetik</i> algorithm
      */
-
     public String colognePhonetic(String text) {
         if (text == null) {
             return null;
@@ -430,7 +405,6 @@ public class ColognePhonetic implements 
             lastChar = chr;
             lastCode = code;
         }
-
         return left.toString();
     }
 
@@ -443,7 +417,6 @@ public class ColognePhonetic implements 
                 return true;
             }
         }
-
         return false;
     }