package com.fr.third.antlr; /* ANTLR Translator Generator * Project led by Terence Parr at http://www.cs.usfca.edu * Software rights: http://www.antlr.org/license.html * * $Id: //depot/code/org.antlr/release/antlr-2.7.7/antlr/ANTLRStringBuffer.java#2 $ */ // 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 = null; protected int length = 0; // length and also where to store next char public ANTLRStringBuffer() { buffer = new char[50]; } public ANTLRStringBuffer(int n) { buffer = new char[n]; } 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('\0'); } } } public final String toString() { return new String(buffer, 0, length); } }