# System.Buffers ``` diff namespace System.Buffers { + public static class BuffersExtensions { + public static void CopyTo(this in ReadOnlySequence source, Span destination); + public static Nullable PositionOf(this in ReadOnlySequence source, T value) where T : IEquatable; + public static T[] ToArray(this in ReadOnlySequence sequence); + public static void Write(this IBufferWriter writer, ReadOnlySpan value); + } + public interface IBufferWriter { + void Advance(int count); + Memory GetMemory(int sizeHint = 0); + Span GetSpan(int sizeHint = 0); + } + public interface IMemoryOwner : IDisposable { + Memory Memory { get; } + } + public interface IPinnable { + MemoryHandle Pin(int elementIndex); + void Unpin(); + } + public struct MemoryHandle : IDisposable { + public unsafe MemoryHandle(void* pointer, GCHandle handle = default(GCHandle), IPinnable pinnable = null); + public unsafe void* Pointer { get; } + public void Dispose(); + } + public abstract class MemoryManager : IDisposable, IMemoryOwner, IPinnable { + protected MemoryManager(); + public virtual Memory Memory { get; } + protected Memory CreateMemory(int length); + protected Memory CreateMemory(int start, int length); + protected abstract void Dispose(bool disposing); + public abstract Span GetSpan(); + public abstract MemoryHandle Pin(int elementIndex = 0); + void System.IDisposable.Dispose(); + protected internal virtual bool TryGetArray(out ArraySegment segment); + public abstract void Unpin(); + } + public abstract class MemoryPool : IDisposable { + protected MemoryPool(); + public abstract int MaxBufferSize { get; } + public static MemoryPool Shared { get; } + public void Dispose(); + protected abstract void Dispose(bool disposing); + public abstract IMemoryOwner Rent(int minBufferSize = -1); + } + public enum OperationStatus { + DestinationTooSmall = 1, + Done = 0, + InvalidData = 3, + NeedMoreData = 2, + } + public readonly struct ReadOnlySequence { + public static readonly ReadOnlySequence Empty; + public ReadOnlySequence(ReadOnlySequenceSegment startSegment, int startIndex, ReadOnlySequenceSegment endSegment, int endIndex); + public ReadOnlySequence(ReadOnlyMemory memory); + public ReadOnlySequence(T[] array); + public ReadOnlySequence(T[] array, int start, int length); + public SequencePosition End { get; } + public ReadOnlyMemory First { get; } + public bool IsEmpty { get; } + public bool IsSingleSegment { get; } + public long Length { get; } + public SequencePosition Start { get; } + public ReadOnlySequence.Enumerator GetEnumerator(); + public SequencePosition GetPosition(long offset); + public SequencePosition GetPosition(long offset, SequencePosition origin); + public ReadOnlySequence Slice(int start, int length); + public ReadOnlySequence Slice(int start, SequencePosition end); + public ReadOnlySequence Slice(long start); + public ReadOnlySequence Slice(long start, long length); + public ReadOnlySequence Slice(long start, SequencePosition end); + public ReadOnlySequence Slice(SequencePosition start); + public ReadOnlySequence Slice(SequencePosition start, int length); + public ReadOnlySequence Slice(SequencePosition start, long length); + public ReadOnlySequence Slice(SequencePosition start, SequencePosition end); + public override string ToString(); + public bool TryGet(ref SequencePosition position, out ReadOnlyMemory memory, bool advance = true); + public struct Enumerator { + public Enumerator(in ReadOnlySequence sequence); + public ReadOnlyMemory Current { get; } + public bool MoveNext(); + } + } + public abstract class ReadOnlySequenceSegment { + protected ReadOnlySequenceSegment(); + public ReadOnlyMemory Memory { get; protected set; } + public ReadOnlySequenceSegment Next { get; protected set; } + public long RunningIndex { get; protected set; } + } + public delegate void ReadOnlySpanAction(ReadOnlySpan span, TArg arg); + public delegate void SpanAction(Span span, TArg arg); + public readonly struct StandardFormat : IEquatable { + public const byte MaxPrecision = (byte)99; + public const byte NoPrecision = (byte)255; + public StandardFormat(char symbol, byte precision = (byte)255); + public bool HasPrecision { get; } + public bool IsDefault { get; } + public byte Precision { get; } + public char Symbol { get; } + public bool Equals(StandardFormat other); + public override bool Equals(object obj); + public override int GetHashCode(); + public static bool operator ==(StandardFormat left, StandardFormat right); + public static implicit operator StandardFormat (char symbol); + public static bool operator !=(StandardFormat left, StandardFormat right); + public static StandardFormat Parse(ReadOnlySpan format); + public static StandardFormat Parse(string format); + public override string ToString(); + } } ```