public void WriteBytes(IByteBuffer source)
{
ThrowIfDisposed();
EnsureIsWritable();
EnsureSpaceAvailable(source.Length);
var savedPosition = source.Position;
source.Position = 0;
var chunkIndex = (_sliceOffset + _position) / _chunkSize;
var chunkOffset = (_sliceOffset + _position) % _chunkSize;
var remaining = source.Length;
while (remaining > 0)
{
var chunkRemaining = _chunkSize - chunkOffset;
var bytesToCopy = (remaining < chunkRemaining) ? remaining : chunkRemaining;
source.ReadBytes(_chunks[chunkIndex].Bytes, chunkOffset, bytesToCopy);
chunkIndex += 1;
chunkOffset = 0;
remaining -= bytesToCopy;
_position += bytesToCopy;
}
if (_length < _position)
{
_length = _position;
}
source.Position = savedPosition;
}