diff --git a/CHANGELOG.md b/CHANGELOG.md index 20fbb9f..27be9f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ All notable changes to **ValueStringBuilder** will be documented in this file. T ## [Unreleased] +### Added + +- `AppendSpan` method + ## [1.21.1] - 2024-11-08 ### Changed diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs index 3f9b994..576fe5c 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs @@ -136,6 +136,24 @@ public void AppendLine(scoped ReadOnlySpan str) Append(string.Concat(str, Environment.NewLine)); } + /// + /// Increases the size of the string builder returning a span of the length appended. + /// + /// Integer representing the length to be appended. + /// A span with the characters appended. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Span AppendSpan(int length) + { + int origPos = bufferPosition; + if (origPos > buffer.Length - length) + { + Grow(length); + } + + bufferPosition = origPos + length; + return buffer.Slice(origPos, length); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] private void AppendSpanFormattable(T value, ReadOnlySpan format = default, int bufferSize = 36) where T : ISpanFormattable diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs index 541a246..e582764 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs @@ -47,6 +47,18 @@ public void ShouldAppendLine() stringBuilder.ToString().Should().Contain("Hello").And.Contain(Environment.NewLine); } + [Fact] + public void ShouldAppendSpan() + { + using var stringBuilder = new ValueStringBuilder(); + + var returned = stringBuilder.AppendSpan(2); + + stringBuilder.Length.Should().Be(2); + + stringBuilder.ToString().Should().Be(returned.ToString()); + } + [Fact] public void ShouldOnlyAddNewline() {