Patch: FYI:

Tom Tromey tromey@redhat.com
Mon Mar 31 01:03:00 GMT 2003


I'm checking this in on the trunk.

This merges more of String with Classpath.  It adds some
documentation, a few cosmetic changes, plus a change to not share a
StringBuffer's value if the sharable part is small relative to the
size of the buffer.

Tom

Index: ChangeLog
from  Tom Tromey  <tromey@redhat.com>
	* java/lang/String.java (data, boffset, count): Documented.
	(String(byte[],String)): Reformatted.
	(String(byte[])): Likewise.
	(lastIndexOf(int)): Likewise.
	(lastIndexOf(String)): Likewise.
	(substring(int)): Renamed argument to match Classpath.
	(String(StringBuffer)): Don't share buffer if it is nearly empty.

Index: java/lang/String.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/lang/String.java,v
retrieving revision 1.22
diff -u -r1.22 String.java
--- java/lang/String.java 30 Mar 2003 21:14:32 -0000 1.22
+++ java/lang/String.java 31 Mar 2003 01:01:07 -0000
@@ -84,8 +84,26 @@
    */
   private static final long serialVersionUID = -6849794470754667710L;
 
+  /**
+   * This is the object that holds the characters that make up the
+   * String.  It might be a char[], or it could be String.  It could
+   * even be `this'.  The actual characters can't be located using
+   * pure Java code.
+   * @see #boffset
+   */
   private Object data;
-  private int boffset; // Note this is a byte offset - don't use in Java code!
+
+  /**
+   * This is a <emph>byte</emph> offset of the actual characters from
+   * the start of the character-holding object.  Don't use this field
+   * in Java code.
+   */
+  private int boffset;
+
+  /**
+   * Holds the number of characters in value.  Package visible for use
+   * by trusted code.
+   */
   int count;
 
   /**
@@ -298,7 +316,7 @@
   public String(byte[] data, String encoding)
     throws UnsupportedEncodingException
   {
-    this (data, 0, data.length, encoding);
+    this(data, 0, data.length, encoding);
   }
 
   /**
@@ -357,7 +375,7 @@
    */
   public String(byte[] data)
   {
-    this (data, 0, data.length);
+    this(data, 0, data.length);
   }
 
   /**
@@ -371,8 +389,11 @@
   {
     synchronized (buffer)
       {
-	buffer.shared = true;
-	init (buffer.value, 0, buffer.count, true);
+	// Share unless buffer is 3/4 empty.
+	boolean should_copy = ((buffer.count << 2) < buffer.value.length);
+	if (! should_copy)
+	  buffer.shared = true;
+	init (buffer.value, 0, buffer.count, ! should_copy);
       }
   }
 
@@ -721,7 +742,7 @@
    */
   public int lastIndexOf(int ch)
   {
-    return lastIndexOf (ch, count - 1);
+    return lastIndexOf(ch, count - 1);
   }
 
   /**
@@ -770,7 +791,7 @@
    */
   public int lastIndexOf(String str)
   {
-    return lastIndexOf (str, count - str.count);
+    return lastIndexOf(str, count - str.count);
   }
 
   /**
@@ -806,9 +827,9 @@
    * @throws IndexOutOfBoundsException if begin < 0 || begin > length()
    *         (while unspecified, this is a StringIndexOutOfBoundsException)
    */
-  public String substring(int beginIndex)
+  public String substring(int begin)
   {
-    return substring (beginIndex, count);
+    return substring(begin, count);
   }
 
   /**



More information about the Java-patches mailing list