private void AddBuffer() {
Debug.Assert( buffers != null );
// check the buffers array it its big enough
if ( buffersCount + 1 == buffers.Length ) {
Buffer[] newBuffers = new Buffer[buffers.Length * 2];
Array.Copy( buffers, 0, newBuffers, 0, buffers.Length );
buffers = newBuffers;
}
// use the recycled buffer if we have one
char[] newBuffer;
if ( buffers[buffersCount].recycledBuffer != null ) {
newBuffer = (char[])buffers[buffersCount].recycledBuffer.Target;
if ( newBuffer != null ) {
buffers[buffersCount].recycledBuffer.Target = null;
goto End;
}
}
newBuffer = new char[BufferSize];
End:
// add the buffer to the list
lastBuffer = newBuffer;
buffers[buffersCount++].buffer = newBuffer;
lastBufferIndex = 0;
}