// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // Copied from https://github.com/dotnet/runtime/blob/dcbf3413c5f7ae431a68fd0d3f09af095b525887/src/libraries/System.Net.ServerSentEvents/src/System/Net/ServerSentEvents/PooledByteBufferWriter.cs using System.Buffers; using System.Diagnostics; namespace System.Net.ServerSentEvents; internal sealed class PooledByteBufferWriter : IBufferWriter, IDisposable { private const int MinimumBufferSize = 256; private ArrayBuffer _buffer = new(initialSize: 256, usePool: true); public void Advance(int count) => _buffer.Commit(count); public Memory GetMemory(int sizeHint = 0) { _buffer.EnsureAvailableSpace(Math.Max(sizeHint, MinimumBufferSize)); return _buffer.AvailableMemory; } public Span GetSpan(int sizeHint = 0) { _buffer.EnsureAvailableSpace(Math.Max(sizeHint, MinimumBufferSize)); return _buffer.AvailableSpan; } public ReadOnlyMemory WrittenMemory => _buffer.ActiveMemory; public int Capacity => _buffer.Capacity; public int WrittenCount => _buffer.ActiveLength; public void Reset() => _buffer.Discard(_buffer.ActiveLength); public void Dispose() => _buffer.Dispose(); }