Skip to content

Commit eb8b793

Browse files
committed
Refactor a lot common code in the left and right buffer classes into a new common superclass.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/codec/trunk@1063346 13f79535-47bb-0310-9956-ffa450edef68
1 parent 3040f29 commit eb8b793

1 file changed

Lines changed: 46 additions & 73 deletions

File tree

src/java/org/apache/commons/codec/language/ColognePhonetic.java

Lines changed: 46 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -180,22 +180,18 @@
180180
*/
181181
public class ColognePhonetic implements StringEncoder {
182182

183-
private class CologneLeftBuffer implements CharSequence {
183+
private abstract class CologneBuffer implements CharSequence {
184184

185-
private final char[] data;
186-
private int length = 0;
185+
protected final char[] data;
186+
protected int length = 0;
187187

188-
public CologneLeftBuffer(int buffSize) {
189-
data = new char[buffSize];
190-
}
191-
192-
public CologneLeftBuffer(char[] data) {
188+
public CologneBuffer(char[] data) {
193189
this.data = data;
194190
this.length = data.length;
195191
}
196192

197-
public int length() {
198-
return length;
193+
public CologneBuffer(int buffSize) {
194+
data = new char[buffSize];
199195
}
200196

201197
public char charAt(int index) {
@@ -206,101 +202,81 @@ public char charAt(int index) {
206202
}
207203
}
208204

209-
public CharSequence subSequence(int start, int end) {
210-
final int length = end - start;
211-
212-
char[] retData = copyData(start, length);
213-
214-
return new CologneLeftBuffer(retData);
215-
}
216-
217-
private char[] copyData(int start, final int length) {
218-
char[] retData = new char[length];
219-
220-
System.arraycopy(data, start, retData, 0, length);
221-
return retData;
222-
}
205+
protected abstract char[] copyData(int start, final int length);
223206

224-
public char getLast() {
225-
return data[length - 1];
226-
}
207+
protected abstract CologneBuffer createCologneBuffer(char[] data);
227208

228-
public void putRight(char chr) {
229-
data[length] = chr;
230-
length++;
209+
public int length() {
210+
return length;
231211
}
232212

233-
public char dropLast() {
234-
length--;
235-
return data[length];
213+
public CharSequence subSequence(int start, int end) {
214+
final int length = end - start;
215+
char[] newData = copyData(start, length);
216+
return createCologneBuffer(newData);
236217
}
237218

238219
public String toString() {
239220
return new String(copyData(0, length));
240221
}
241222
}
242223

243-
private class CologneRightBuffer implements CharSequence {
224+
private class CologneLeftBuffer extends CologneBuffer {
244225

245-
private int length = 0;
246-
private final char[] data;
226+
public CologneLeftBuffer(char[] data) {
227+
super(data);
228+
}
247229

248-
public CologneRightBuffer(int buffSize) {
249-
data = new char[buffSize];
230+
public CologneLeftBuffer(int buffSize) {
231+
super(buffSize);
250232
}
251233

252-
public CologneRightBuffer(char[] data) {
253-
this.data = data;
254-
this.length = data.length;
234+
protected char[] copyData(int start, final int length) {
235+
char[] retData = new char[length];
236+
System.arraycopy(data, start, retData, 0, length);
237+
return retData;
255238
}
256239

257-
public int length() {
258-
return length;
240+
protected CologneBuffer createCologneBuffer(char[] data) {
241+
return new CologneLeftBuffer(data);
259242
}
260243

261-
public char charAt(int index) {
262-
if (index < length) {
263-
return data[data.length - length + index];
264-
} else {
265-
throw new IndexOutOfBoundsException();
266-
}
244+
public void putRight(char chr) {
245+
data[length] = chr;
246+
length++;
267247
}
248+
}
268249

269-
public CharSequence subSequence(int start, int end) {
270-
final int length = end - start;
271-
char[] newData = copyData(start, length);
250+
private class CologneRightBuffer extends CologneBuffer {
272251

273-
return new CologneRightBuffer(newData);
252+
public CologneRightBuffer(char[] data) {
253+
super(data);
274254
}
275255

276-
private char[] copyData(int start, final int length) {
256+
protected char[] copyData(int start, final int length) {
277257
char[] newData = new char[length];
278-
279-
System.arraycopy(data, data.length - this.length + start, newData,
280-
0, length);
258+
System.arraycopy(data, data.length - this.length + start, newData, 0, length);
281259
return newData;
282260
}
283261

284-
public void putLeft(char chr) {
285-
length++;
286-
data[data.length - length] = chr;
287-
}
288-
289-
public char getNext() {
290-
return data[data.length - length];
262+
protected CologneBuffer createCologneBuffer(char[] data) {
263+
return new CologneRightBuffer(data);
291264
}
292265

293266
public char dropNext() {
294-
char ret = data[data.length - length];
267+
char ch = data[data.length - length];
295268
length--;
296-
297-
return ret;
269+
return ch;
298270
}
299271

300-
public String toString() {
301-
return new String(copyData(0, length));
272+
public char getNext() {
273+
return data[data.length - length];
274+
}
275+
276+
public void putLeft(char ch) {
277+
length++;
278+
data[data.length - length] = ch;
302279
}
303-
304280
}
305281

306282
private static final char[][] PRE_REPLACEMENTS = new char[][] {
@@ -340,7 +316,6 @@ public String encode(String text) {
340316
* @return the corresponding encoding according to the <i>Kölner
341317
* Phonetik</i> algorithm
342318
*/
343-
344319
public String colognePhonetic(String text) {
345320
if (text == null) {
346321
return null;
@@ -430,7 +405,6 @@ public String colognePhonetic(String text) {
430405
lastChar = chr;
431406
lastCode = code;
432407
}
433-
434408
return left.toString();
435409
}
436410

@@ -443,7 +417,6 @@ private static boolean arrayContains(char[] arr, char key) {
443417
return true;
444418
}
445419
}
446-
447420
return false;
448421
}
449422

0 commit comments

Comments
 (0)