private void SetLength( int newLength ) {
Debug.Assert( newLength <= length );
if ( newLength == length ) {
return;
}
if ( length <= MaxStringBuilderLength ) {
stringBuilder.Length = newLength;
}
else {
int newLastIndex = newLength;
int i;
for ( i = 0; i < buffersCount; i++ ) {
if ( newLastIndex < buffers[i].buffer.Length ) {
break;
}
newLastIndex -= buffers[i].buffer.Length;
}
if ( i < buffersCount ) {
lastBuffer = buffers[i].buffer;
lastBufferIndex = newLastIndex;
i++;
int newBuffersCount = i;
for ( ; i < buffersCount; i++ ) {
Recycle( buffers[i] );
}
buffersCount = newBuffersCount;
}
}
length = newLength;
}