ANTLRStringBuffer.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:2k
- package antlr;
- /* ANTLR Translator Generator
- * Project led by Terence Parr at http://www.jGuru.com
- * Software rights: http://www.antlr.org/RIGHTS.html
- *
- * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/ANTLRStringBuffer.java#1 $
- */
- // Implementation of a StringBuffer-like object that does not have the
- // unfortunate side-effect of creating Strings with very large buffers.
- public class ANTLRStringBuffer {
- protected char[] buffer = new char[8];
- protected int length = 0; // length and also where to store next char
- public ANTLRStringBuffer() {}
- public final void append(char c) {
- // This would normally be an "ensureCapacity" method, but inlined
- // here for speed.
- if (length >= buffer.length) {
- // Compute a new length that is at least double old length
- int newSize = buffer.length;
- while (length >= newSize) {
- newSize *= 2;
- }
- // Allocate new array and copy buffer
- char[] newBuffer = new char[newSize];
- for (int i = 0; i < length; i++) {
- newBuffer[i] = buffer[i];
- }
- buffer = newBuffer;
- }
- buffer[length] = c;
- length++;
- }
- public final void append(String s) {
- for (int i = 0; i < s.length(); i++) {
- append(s.charAt(i));
- }
- }
- public final char charAt(int index) { return buffer[index]; }
- final public char[] getBuffer() { return buffer; }
- public final int length() { return length; }
- public final void setCharAt(int index, char ch) { buffer[index] = ch; }
- public final void setLength(int newLength) {
- if (newLength < length) {
- length = newLength;
- } else {
- while (newLength > length) {
- append(' ');
- }
- }
- }
- public final String toString() {
- return new String(buffer, 0, length);
- }
- }