Frames | No Frames |
1: // This is a simplified copy of java.lang.StringBuffer with 2: // `synchronized' removed. 3: 4: /* StringBuffer.java -- Growable strings 5: Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. 6: 7: This file is part of GNU Classpath. 8: 9: GNU Classpath is free software; you can redistribute it and/or modify 10: it under the terms of the GNU General Public License as published by 11: the Free Software Foundation; either version 2, or (at your option) 12: any later version. 13: 14: GNU Classpath is distributed in the hope that it will be useful, but 15: WITHOUT ANY WARRANTY; without even the implied warranty of 16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17: General Public License for more details. 18: 19: You should have received a copy of the GNU General Public License 20: along with GNU Classpath; see the file COPYING. If not, write to the 21: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 22: 02110-1301 USA. 23: 24: Linking this library statically or dynamically with other modules is 25: making a combined work based on this library. Thus, the terms and 26: conditions of the GNU General Public License cover the whole 27: combination. 28: 29: As a special exception, the copyright holders of this library give you 30: permission to link this library with independent modules to produce an 31: executable, regardless of the license terms of these independent 32: modules, and to copy and distribute the resulting executable under 33: terms of your choice, provided that you also meet, for each linked 34: independent module, the terms and conditions of the license of that 35: module. An independent module is a module which is not derived from 36: or based on this library. If you modify this library, you may extend 37: this exception to your version of the library, but you are not 38: obligated to do so. If you do not wish to do so, delete this 39: exception statement from your version. */ 40: 41: package gnu.gcj.runtime; 42: 43: public final class StringBuffer 44: { 45: /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>. 46: * Uses <code>String.valueOf()</code> to convert to 47: * <code>String</code>. 48: * @param bool the <code>boolean</code> to convert and append. 49: * @return this <code>StringBuffer</code>. 50: * @see java.lang.String#valueOf(boolean) 51: */ 52: public StringBuffer append (boolean bool) 53: { 54: return append (bool ? "true" : "false"); 55: } 56: 57: /** Append the <code>char</code> to this <code>StringBuffer</code>. 58: * @param c the <code>char</code> to append. 59: * @return this <code>StringBuffer</code>. 60: */ 61: public StringBuffer append (char ch) 62: { 63: ensureCapacity_unsynchronized (count + 1); 64: value[count++] = ch; 65: return this; 66: } 67: 68: /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>. 69: * Uses <code>String.valueOf()</code> to convert to 70: * <code>String</code>. 71: * @param inum the <code>int</code> to convert and append. 72: * @return this <code>StringBuffer</code>. 73: * @see java.lang.String#valueOf(int) 74: */ 75: public native StringBuffer append (int inum); 76: 77: /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>. 78: * Uses <code>String.valueOf()</code> to convert to 79: * <code>String</code>. 80: * @param lnum the <code>long</code> to convert and append. 81: * @return this <code>StringBuffer</code>. 82: * @see java.lang.String#valueOf(long) 83: */ 84: public StringBuffer append (long lnum) 85: { 86: return append (Long.toString (lnum)); 87: } 88: 89: /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>. 90: * Uses <code>String.valueOf()</code> to convert to 91: * <code>String</code>. 92: * @param fnum the <code>float</code> to convert and append. 93: * @return this <code>StringBuffer</code>. 94: * @see java.lang.String#valueOf(float) 95: */ 96: public StringBuffer append (float fnum) 97: { 98: return append (Float.toString (fnum)); 99: } 100: 101: /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>. 102: * Uses <code>String.valueOf()</code> to convert to 103: * <code>String</code>. 104: * @param dnum the <code>double</code> to convert and append. 105: * @return this <code>StringBuffer</code>. 106: * @see java.lang.String#valueOf(double) 107: */ 108: public StringBuffer append (double dnum) 109: { 110: return append (Double.toString (dnum)); 111: } 112: 113: /** Append the <code>String</code> value of the argument to this <code>StringBuffer</code>. 114: * Uses <code>String.valueOf()</code> to convert to 115: * <code>String</code>. 116: * @param obj the <code>Object</code> to convert and append. 117: * @return this <code>StringBuffer</code>. 118: * @see java.lang.String#valueOf(java.lang.Object) 119: */ 120: public StringBuffer append (Object obj) 121: { 122: return append (String.valueOf(obj)); 123: } 124: 125: /** Append the <code>String</code> to this <code>StringBuffer</code>. 126: * @param str the <code>String</code> to append. 127: * @return this <code>StringBuffer</code>. 128: */ 129: public StringBuffer append (String str) 130: { 131: if (str == null) 132: str = "null"; 133: int len = str.length(); 134: ensureCapacity_unsynchronized (count + len); 135: str.getChars(0, len, value, count); 136: count += len; 137: return this; 138: } 139: 140: private void ensureCapacity_unsynchronized (int minimumCapacity) 141: { 142: if (minimumCapacity > value.length) 143: { 144: minimumCapacity = Math.max (minimumCapacity, value.length * 2 + 2); 145: char[] nb = new char[minimumCapacity]; 146: System.arraycopy(value, 0, nb, 0, count); 147: value = nb; 148: } 149: } 150: 151: /** Create a new StringBuffer with default capacity 16. 152: * @see JLS 20.13.1 153: */ 154: public StringBuffer () 155: { 156: this (DEFAULT_CAPACITY); 157: } 158: 159: /** Create an empty <code>StringBuffer</code> with the specified initial capacity. 160: * @param capacity the initial capacity. 161: */ 162: public StringBuffer (int capacity) 163: { 164: count = 0; 165: value = new char[capacity]; 166: } 167: 168: /** Create a new <code>StringBuffer</code> with the characters in the specified <code>String</code>. 169: * Initial capacity will be the size of the String plus 16. 170: * @param str the <code>String</code> to make a <code>StringBuffer</code> out of. 171: */ 172: public StringBuffer (String str) 173: { 174: if (str == null) 175: str = "null"; 176: count = str.length(); 177: // JLS: The initial capacity of the string buffer is 16 plus the 178: // length of the argument string. 179: value = new char[count + DEFAULT_CAPACITY]; 180: str.getChars(0, count, value, 0); 181: } 182: 183: /** Convert this <code>StringBuffer</code> to a <code>String</code>. 184: * @return the characters in this StringBuffer 185: */ 186: // This is native because efficient implementation requires avoiding 187: // the Java protection mechanism. 188: public native String toString (); 189: 190: // Index of next available character. Note that this has 191: // permissions set this way so that String can get the value. 192: int count; 193: 194: // The buffer. Note that this has permissions set this way so that 195: // String can get the value. 196: char[] value; 197: 198: private final static int DEFAULT_CAPACITY = 16; // JLS 20.13.1 199: }