Struct BufferWriterSlim<T>
Represents stack-allocated buffer builder.
Inherited Members
Namespace: DotNext.Buffers
Assembly: DotNext.dll
Syntax
public struct BufferWriterSlim<T>
Type Parameters
| Name | Description |
|---|---|
| T | The type of the elements in the memory. |
Remarks
This type is similar to PooledArrayBufferWriter<T> and PooledBufferWriter<T> classes but it tries to avoid on-heap allocation. Moreover, it can use pre-allocated stack memory as a initial buffer used for writing. If builder requires more space then pooled memory used.
Constructors
| Improve this Doc View SourceBufferWriterSlim(Span<T>, Boolean, MemoryAllocator<T>)
Initializes growable builder.
Declaration
public BufferWriterSlim(Span<T> buffer, bool copyOnOverflow, MemoryAllocator<T> allocator = null)
Parameters
| Type | Name | Description |
|---|---|---|
| Span<T> | buffer | Pre-allocated buffer used by this builder. |
| Boolean | copyOnOverflow | true to copy pre-allocated buffer to pooled memory on overflow; false to keep head of the written content in the pre-allocated buffer. |
| MemoryAllocator<T> | allocator | The memory allocator used to rent the memory blocks. |
Remarks
The builder created with this constructor is growable. However, additional memory will not be
requested using allocator while buffer space is sufficient.
If allocator is null then Shared
is used for memory pooling.
WrittenSpan property is supported only if copyOnOverflow is true.
Otherwise, it's not possible to represent written content as contiguous memory block.
Properties
| Improve this Doc View SourceCapacity
Gets the total amount of space within the underlying memory.
Declaration
public int Capacity { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
FreeCapacity
Gets the amount of space available that can still be written into without forcing the underlying buffer to grow.
Declaration
public int FreeCapacity { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
Item[Int32]
Gets the element at the specified zero-based index within this builder.
Declaration
public T this[int index] { get; }
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | index | he zero-based index of the element. |
Property Value
| Type | Description |
|---|---|
| T | The element at the specified index. |
Exceptions
| Type | Condition |
|---|---|
| ArgumentOutOfRangeException |
|
WrittenCount
Gets the amount of data written to the underlying memory so far.
Declaration
public int WrittenCount { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
WrittenSpan
Gets span over constructed memory block.
Declaration
public ReadOnlySpan<T> WrittenSpan { get; }
Property Value
| Type | Description |
|---|---|
| ReadOnlySpan<T> | The constructed memory block. |
Exceptions
| Type | Condition |
|---|---|
| NotSupportedException | If this builder was constructed using BufferWriterSlim(Span<T>, Boolean, MemoryAllocator<T>)
constructor and |
Methods
| Improve this Doc View SourceAdd(T)
Adds single element to this builder.
Declaration
public void Add(T item)
Parameters
| Type | Name | Description |
|---|---|---|
| T | item | The item to be added. |
Exceptions
| Type | Condition |
|---|---|
| InsufficientMemoryException | Pre-allocated initial buffer size is not enough to place |
Clear(Boolean)
lears the data written to the underlying buffer.
Declaration
public void Clear(bool reuseBuffer)
Parameters
| Type | Name | Description |
|---|---|---|
| Boolean | reuseBuffer | true to reuse the internal buffer; false to destroy the internal buffer. |
CopyTo(ref SpanWriter<T>)
Copies written content.
Declaration
public int CopyTo(ref SpanWriter<T> output)
Parameters
| Type | Name | Description |
|---|---|---|
| SpanWriter<T> | output | The memory writer. |
Returns
| Type | Description |
|---|---|
| Int32 | The actual number of copied elements. |
CopyTo(IBufferWriter<T>)
Copies written content to the specified buffer writer.
Declaration
public void CopyTo(IBufferWriter<T> output)
Parameters
| Type | Name | Description |
|---|---|---|
| IBufferWriter<T> | output | The buffer writer. |
CopyTo(Span<T>)
Copies written content to the specified span.
Declaration
public int CopyTo(Span<T> output)
Parameters
| Type | Name | Description |
|---|---|---|
| Span<T> | output | The span of elemenents to modify. |
Returns
| Type | Description |
|---|---|
| Int32 | The actual number of copied elements. |
Remarks
The output span can be larger or smaller than WrittenCount.
CopyTo<TArg>(ReadOnlySpanAction<T, TArg>, TArg)
Transfers written content to the specified callback.
Declaration
public void CopyTo<TArg>(ReadOnlySpanAction<T, TArg> action, TArg arg)
Parameters
| Type | Name | Description |
|---|---|---|
| ReadOnlySpanAction<T, TArg> | action | The callback accepting written content. Can be called more than once. |
| TArg | arg | The argument to be passed to the callback. |
Type Parameters
| Name | Description |
|---|---|
| TArg | The type of the argument to be passed to the callback. |
Dispose()
Releases internal buffer used by this builder.
Declaration
public void Dispose()
Write(ReadOnlySpan<T>)
Writes elements to this buffer.
Declaration
public void Write(ReadOnlySpan<T> input)
Parameters
| Type | Name | Description |
|---|---|---|
| ReadOnlySpan<T> | input | The span of elements to be written. |
Exceptions
| Type | Condition |
|---|---|
| InsufficientMemoryException | Pre-allocated initial buffer size is not enough to place |
| OverflowException | The size of the internal buffer becomes greater than MaxValue. |