dotnet/runtime

[API Proposal]: SequenceReader<T>.TryAdvanceTo(ReadOnlySpan<T> delimiter)

Open

#71,471 建立於 2022年6月30日

在 GitHub 查看
 (3 留言) (8 反應) (0 負責人)C# (5,445 fork)batch import
api-approvedarea-System.Buffershelp wantedin-pr

倉庫指標

Star
 (17,886 star)
PR 合併指標
 (平均合併 12天 11小時) (30 天內合併 661 個 PR)

描述

Background and motivation

Today SequenceReader<T>.TryReadTo contains overloads with T to read to a single delimiter and ReadOnlySpan<T> to read to a sequence of delimiters, but SequenceReader<T>.TryAdvanceTo only contains overloads for single delimiter T, the proposal is to add a new overload to SequenceReader<T>.TryAdvanceTo that takes a ReadOnlySpan<T> which would advance the reader to the next occurrence of a delimiter sequence.

Main usage is to simplify the parsing of data formats with multi-byte delimiters. E.g., the PDF file format marks the start and end of a dictionary using << and >>, and surrounds the object with {id} 0 obj and endobj, this overload helps with parsing of such data.

#1111

API Proposal

namespace System.Buffers;

public ref struct SequenceReader<T>
{
    public bool TryAdvanceTo(ReadOnlySpan<T> delimiter, bool advancePastDelimiter = true);
}

API Usage

// Read data between << and >>
var sequenceReader = new SequenceReader(buffer);
sequenceReader.TryAdvanceTo("<<"u8);
sequenceReader.TryReadTo(out ReadOnlySpan<byte> span, ">>"u8);

Alternative Designs

No response

Risks

No response

貢獻者指南