From b23a8c88c4124e17518ebe2b5ebd8122161ce727 Mon Sep 17 00:00:00 2001 From: Bruno Sampaio Camba Date: Wed, 18 Dec 2024 00:49:40 -0300 Subject: [PATCH 1/3] feat: Added AppendSpan --- .../ValueStringBuilder.Append.cs | 13 +++++++++++++ .../ValueStringBuilder.Append.Tests.cs | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs index 3f9b994..daf3894 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs @@ -136,6 +136,19 @@ public void AppendLine(scoped ReadOnlySpan str) Append(string.Concat(str, Environment.NewLine)); } + [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() { From f16c815d03765c6928a328d34b7436df3c64c662 Mon Sep 17 00:00:00 2001 From: Bruno Sampaio Camba Date: Wed, 18 Dec 2024 13:33:54 -0300 Subject: [PATCH 2/3] docs: Added xmldoc for AppendSpan --- src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs index daf3894..576fe5c 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Append.cs @@ -136,6 +136,11 @@ 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) { From 7671c1a48b84cc29b1314f15c049f9a6368fa0eb Mon Sep 17 00:00:00 2001 From: Bruno Sampaio Camba Date: Wed, 18 Dec 2024 13:36:20 -0300 Subject: [PATCH 3/3] docs: Added AppendSpan to ChangeLog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) 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