The prototype of this type is in https://github.com/dotnet/corefxlab/tree/master/src/System.Buffers.ReaderWriter/System/Buffers/Writer
namespace System.Buffers.Writer {
public ref struct BufferWriter<T> where T : IBufferWriter<byte> {
public BufferWriter(T output);
public ReadOnlySpan<byte> NewLine;
public Span<byte> Buffer { get; }
public void Advance(int count);
public void Ensure(int count=1);
public void Flush();
// primitive APIs will be available for:
// byte, sbyte, ushort, short, uint, int, ulong, long, float, double, char, Utf8Char
// DateTime, DateTimeOffset, TimeSpan, Guid, Uri, BigInteger, Decimal
public void Write(int value);
public void WriteLine(int value);
public void Write(int value, StandardFormat format=default);
public void WriteLine(int value, StandardFormat format=default);
public void Write(int value, TransformationFormat format);
public void WriteLine(int value, TransformationFormat format);
// string APIs
public void Write(string value);
public void WriteLine(string value);
public void Write(string value, TransformationFormat format);
public void WriteLine(string value, TransformationFormat format);
public void Write(ReadOnlySpan<char> value);
public void WriteLine(ReadOnlySpan<char> value);
public void Write(ReadOnlySpan<char> value, TransformationFormat format);
public void WriteLine(ReadOnlySpan<char> value, TransformationFormat format);
public void Write(Utf8String value);
public void WriteLine(Utf8String value);
public void Write(Utf8String value, TransformationFormat format);
public void WriteLine(Utf8String value, TransformationFormat format);
public void Write(ReadOnlySpan<Utf8Char> value);
public void WriteLine(ReadOnlySpan<Utf8Char> value);
public void Write(ReadOnlySpan<Utf8Char> value, TransformationFormat format);
public void WriteLine(ReadOnlySpan<Utf8Char> value, TransformationFormat format);
// writables
public void Write<TWritable>(TWritable value) where TWritable : IWritable;
public void WriteLine<TWritable>(TWritable value) where TWritable : IWritable;
public void Write<TWritable>(TWritable value, StandardFormat format) where TWritable : IWritable;
public void WriteLine<TWritable>(TWritable value, StandardFormat format) where TWritable : IWritable;
public void Write<TWritable>(TWritable value, TransformationFormat format) where TWritable : IWritable;
public void WriteLine<TWritable>(TWritable value, TransformationFormat format) where TWritable : IWritable;
// buffers
public void WriteBytes(ReadOnlySpan<byte> value);
public void WriteBytes(ReadOnlySpan<byte> value, TransformationFormat format);
// Binary write APIs will be available for:
// byte, sbyte, ushort, short, uint, int, ulong, long, float, double
// binary. format is L for Little Endian, and B for Big Endian.
public void WriteBytes(int value, StandardFormat format=default);
public void WriteBytes(int value, TransformationFormat format);
}
public struct TransformationFormat {
public TransformationFormat(IBufferTransformation transformation);
public TransformationFormat(params IBufferTransformation[] transformations);
public StandardFormat Format { get; }
public bool TryTransform(Span<byte> buffer, ref int written);
}
}
namespace System.Buffers {
public interface IWritable {
bool TryWrite(Span<byte> buffer, out int written, StandardFormat format=default(StandardFormat));
}
}
namespace System.Buffers.Operations {
public interface IBufferOperation {
OperationStatus Execute(ReadOnlySpan<byte> input, Span<byte> output, out int consumed, out int written);
}
public interface IBufferTransformation : IBufferOperation {
OperationStatus Transform(Span<byte> buffer, int dataLength, out int written);
}
}
cc: @davidfowl, @pakrym, @GrabYourPitchforks, @ahsonkhan, @joshfree, @terrajobst
The prototype of this type is in https://github.com/dotnet/corefxlab/tree/master/src/System.Buffers.ReaderWriter/System/Buffers/Writer
cc: @davidfowl, @pakrym, @GrabYourPitchforks, @ahsonkhan, @joshfree, @terrajobst