ANTLRStringBuffer.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. package antlr;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/ANTLRStringBuffer.java#1 $
  7.  */
  8. // Implementation of a StringBuffer-like object that does not have the
  9. // unfortunate side-effect of creating Strings with very large buffers.
  10. public class ANTLRStringBuffer {
  11.     protected char[] buffer = new char[8];
  12.     protected int length = 0; // length and also where to store next char
  13.     public ANTLRStringBuffer() {}
  14.     public final void append(char c) {
  15. // This would normally be  an "ensureCapacity" method, but inlined
  16. // here for speed.
  17. if (length >= buffer.length) {
  18.     // Compute a new length that is at least double old length
  19.     int newSize = buffer.length;
  20.     while (length >= newSize) {
  21. newSize *= 2;
  22.     }
  23.     // Allocate new array and copy buffer
  24.     char[] newBuffer = new char[newSize];
  25.     for (int i = 0; i < length; i++) {
  26. newBuffer[i] = buffer[i];
  27.     }
  28.     buffer = newBuffer;
  29. }
  30. buffer[length] = c;
  31. length++;
  32.     }
  33.     public final void append(String s) {
  34. for (int i = 0; i < s.length(); i++) {
  35.     append(s.charAt(i));
  36. }
  37.     }
  38.     public final char charAt(int index) { return buffer[index]; }
  39.     final public char[] getBuffer() { return buffer; }
  40.     public final int length() { return length; }
  41.     public final void setCharAt(int index, char  ch) { buffer[index] = ch; }
  42.     public final void setLength(int newLength) {
  43. if (newLength < length) {
  44.     length = newLength;
  45. } else {
  46.     while (newLength > length) {
  47. append('');
  48.     }
  49. }
  50.     }
  51.     public final String toString() {
  52. return new String(buffer, 0, length);
  53.     }
  54. }