[API Proposal]: Add SearchValues Overloads to SequenceReader
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 30/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- csharp
- Domain
- api, performance
Research direction
Start by reviewing SequenceReader’s existing delimiter overloads and the SearchValues API; the issue names no source files or tests. Done means resolving the generic versus extension-method design and implementing and testing the four proposed overloads.
Written by the indexing model from the issue text.
Description
Background and motivation
SequenceReader has methods that take a ReadOnlySpan of delimiter values and advances/reads until finding one of those values. With SearchValues addition in .NET 8, a new set of overloads is a natural addition. They should be more performant than using the existing overloads while being no more complicated for developers to use (and even easier than using AdvancePastAny(T value0, T value1, T value2, T value3)).
API Proposal
namespace System.Buffers;
public ref struct SequenceReader<T>
{
public bool TryAdvanceToAny(SearchValues<T> delimiters, bool advancePastDelimiter = true);
public long AdvancePastAny(SearchValues<T> values);
public bool TryReadToAny(out ReadOnlySequence<T> sequence, SearchValues<T> delimiters, bool advancePastDelimiter = true);
public bool TryReadToAny(out ReadOnlySpan<T> span, SearchValues<T> delimiters, bool advancePastDelimiter = true);
}
API Usage
var newlines = SearchValues.Create("\r\n");
var sequenceReader = new SequenceReader(buffer);
sequenceReader.TryReadToAny(out ReadOnlySequence<T> line, newlines, false);
sequenceReader.AdvancePastAny(newlines);
Alternative Designs
We could also add extension methods for SequenceReader<char> and SearchValues<string>.
namespace System.Buffers;
public static class SequenceReaderExtensions
{
public static bool TryAdvanceToAny(this SequenceReader<char> reader, SearchValues<string> delimiters, bool advancePastDelimiter = true);
public static long AdvancePastAny(this SequenceReader<char> reader, SearchValues<string> values);
public static bool TryReadToAny(this SequenceReader<char> reader, out ReadOnlySequence<char> sequence, SearchValues<string> delimiters, bool advancePastDelimiter = true);
public static bool TryReadToAny(this SequenceReader<char> reader, out ReadOnlySpan<char> span, SearchValues<string> delimiters, bool advancePastDelimiter = true);
}
Risks
No response
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·