internal static int FindNextCrLf(BufferReader reader) // very deliberately not ref; want snapshot
        {
            // is it in the current span? (we need to handle the offsets differently if so)

            int  totalSkipped   = 0;
            bool haveTrailingCR = false;

            do
            {
                if (reader.RemainingThisSpan == 0)
                {
                    continue;
                }

                var span = reader.SlicedSpan;
                if (haveTrailingCR)
                {
                    if (span[0] == '\n')
                    {
                        return(totalSkipped - 1);
                    }
                }

                int found = span.VectorSafeIndexOfCRLF();
                if (found >= 0)
                {
                    return(totalSkipped + found);
                }

                haveTrailingCR = span[span.Length - 1] == '\r';
                totalSkipped  += span.Length;
            }while (reader.FetchNextSegment());
            return(-1);
        }
        internal static int FindNext(BufferReader reader, byte value) // very deliberately not ref; want snapshot
        {
            int totalSkipped = 0;

            do
            {
                if (reader.RemainingThisSpan == 0)
                {
                    continue;
                }

                var span  = reader.SlicedSpan;
                int found = span.VectorSafeIndexOf(value);
                if (found >= 0)
                {
                    return(totalSkipped + found);
                }

                totalSkipped += span.Length;
            } while (reader.FetchNextSegment());
            return(-1);
        }