public Span <T> GetSpan(int sizeHint = 0) { var requestedSize = Math.Max(sizeHint, 0); if (_buffer.Length < requestedSize + _count) { Resize(this, requestedSize); } return(_buffer.AsSpan(_count, requestedSize));
static void Resize(UnsafeBufferWriter <T> self, int requestedSize) { var newCapacity = Math.Max(4, Math.Max(requestedSize + self._count, self._buffer.Length * 2)); var newBuffer = new UnsafeRawArray <T>(newCapacity, false); try { self._buffer.AsSpan(0, self._count).CopyTo(newBuffer.AsSpan()); } catch { newBuffer.Dispose(); throw; } self._buffer.Dispose(); self._buffer = newBuffer; }