From b03903f1ff7036a3f5dc03a587a73ce6040a41a0 Mon Sep 17 00:00:00 2001 From: Christian Thalinger Date: Mon, 16 Jun 2008 14:00:39 +0200 Subject: [PATCH] * src/classes/gnuclasspath/gnu/java/lang/CPStringBuilder.java: Updated to current CVS version. --- .../gnu/java/lang/CPStringBuilder.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/classes/gnuclasspath/gnu/java/lang/CPStringBuilder.java b/src/classes/gnuclasspath/gnu/java/lang/CPStringBuilder.java index 688f36dbc..27e7d2cc7 100644 --- a/src/classes/gnuclasspath/gnu/java/lang/CPStringBuilder.java +++ b/src/classes/gnuclasspath/gnu/java/lang/CPStringBuilder.java @@ -204,8 +204,11 @@ public final class CPStringBuilder int valueLength = value.length; /* Always call ensureCapacity in order to preserve - copy-on-write semantics. */ - ensureCapacity(newLength); + copy-on-write semantics, except when the position + is simply being reset + */ + if (newLength > 0) + ensureCapacity(newLength); if (newLength < valueLength) { @@ -1036,18 +1039,24 @@ public final class CPStringBuilder * Increase the capacity of this StringBuilder. This will * ensure that an expensive growing operation will not occur until either * minimumCapacity is reached or the array has been allocated. - * The buffer is grown to the larger of minimumCapacity and + * The buffer is grown to either minimumCapacity * 2, if + * the array has been allocated or the larger of minimumCapacity and * capacity() * 2 + 2, if it is not already large enough. * * @param minimumCapacity the new capacity - * @see #capacity() + * @see #length() */ public void ensureCapacity(int minimumCapacity) { if (allocated || minimumCapacity > value.length) { - int max = value.length * 2 + 2; - minimumCapacity = (minimumCapacity < max ? max : minimumCapacity); + if (minimumCapacity > value.length) + { + int max = value.length * 2 + 2; + minimumCapacity = (minimumCapacity < max ? max : minimumCapacity); + } + else + minimumCapacity *= 2; allocateArray(minimumCapacity); } } -- 2.25.1