public void GetBuffers(int pos, int length, out ArraySegment<byte> segment0, out ArraySegment<byte> segment1)
{
var posEnd = pos + length;
if (pos < 0 || posEnd > _length)
throw new ArgumentOutOfRangeException();
if (pos < _head.Count && posEnd <= _head.Count)
{
segment0 = new ArraySegment<byte>(_head.Array, _head.Offset + pos, length);
segment1 = default(ArraySegment<byte>);
}
else if (pos >= _head.Count && posEnd >= _head.Count)
{
segment0 = new ArraySegment<byte>(_tail.Value.Array, _tail.Value.Offset + pos - _head.Count, length);
segment1 = default(ArraySegment<byte>);
}
else
{
var firstLen = _head.Count - pos;
segment0 = new ArraySegment<byte>(_head.Array, _head.Offset + pos, firstLen);
segment1 = new ArraySegment<byte>(_tail.Value.Array, _tail.Value.Offset, length - firstLen);
}
}
}