private void EnsureCapacity(int size)
{
if (size <= _size)
return;
int requiredTailSize = size - _head.Count;
int orgTailSize = _tail != null ? _tail.Value.Count : 0;
int newTailSize = requiredTailSize;
if (newTailSize < 0x100)
newTailSize = 0x100;
if (newTailSize < orgTailSize * 2)
newTailSize = orgTailSize * 2;
if (_tail != null)
{
var newTail = new ArraySegment<byte>(new byte[newTailSize]);
Array.Copy(_tail.Value.Array, _tail.Value.Offset, newTail.Array, newTail.Offset, orgTailSize);
_tail = newTail;
}
else
{
_tail = new ArraySegment<byte>(new byte[newTailSize]);
}
_size = _head.Count + newTailSize;
}