Пример #1
0
        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));
Пример #2
0
            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;
            }