namespace NATS.Server.IO;

public sealed class AdaptiveReadBuffer
{
    private int _target = 4096;

    public int CurrentSize => Math.Clamp(_target, 512, 64 * 1024);

    public void RecordRead(int bytesRead)
    {
        if (bytesRead <= 0)
            return;

        if (bytesRead >= _target)
            _target = Math.Min(_target * 2, 64 * 1024);
        else if (bytesRead < _target / 4)
            _target = Math.Max(_target / 2, 512);
    }
}
