diff --git a/src/LinkDotNet.StringBuilder/LinkDotNet.StringBuilder.csproj b/src/LinkDotNet.StringBuilder/LinkDotNet.StringBuilder.csproj index 616ca4b..ca96be4 100644 --- a/src/LinkDotNet.StringBuilder/LinkDotNet.StringBuilder.csproj +++ b/src/LinkDotNet.StringBuilder/LinkDotNet.StringBuilder.csproj @@ -42,7 +42,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.AppendFormat.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.AppendFormat.cs index b20b91e..3b0c508 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.AppendFormat.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.AppendFormat.cs @@ -362,9 +362,7 @@ public void AppendFormat( [MethodImpl(MethodImplOptions.AggressiveInlining)] private static int GetValidArgumentIndex(ReadOnlySpan placeholder, int allowedRange) { -#pragma warning disable MA0011 - if (!int.TryParse(placeholder[1..^1], out var argIndex)) -#pragma warning restore MA0011 + if (!int.TryParse(placeholder[1..^1], null, out var argIndex)) { throw new FormatException("Invalid argument index in format string: " + placeholder.ToString()); } diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Concat.Helper.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Concat.Helper.cs index 94a099e..e80cd48 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Concat.Helper.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Concat.Helper.cs @@ -20,6 +20,7 @@ public static string Concat(params T[] values) using var sb = new ValueStringBuilder(stackalloc char[128]); sb.AppendJoin(string.Empty, values); + return sb.ToString(); } diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.EnsureCapacity.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.EnsureCapacity.cs index a4779d4..3b170a5 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.EnsureCapacity.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.EnsureCapacity.cs @@ -49,7 +49,8 @@ ref Unsafe.As(ref sourceRef), /// Finds the smallest power of 2 which is greater than or equal to . /// /// The value the result should be greater than or equal to. - /// The smallest power of 2 >= . + /// The smallest power of 2 >= . + [MethodImpl(MethodImplOptions.AggressiveInlining)] private static int FindSmallestPowerOf2Above(int minimum) { return 1 << (int)Math.Ceiling(Math.Log2(minimum)); diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Enumerator.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Enumerator.cs index 02e552e..4135b73 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Enumerator.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Enumerator.cs @@ -9,6 +9,7 @@ public ref partial struct ValueStringBuilder /// Creates an enumerator over the characters in the builder. /// /// An enumerator over the characters in the builder. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly Enumerator GetEnumerator() => new(buffer[..bufferPosition]); /// Enumerates the elements of a . diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Pad.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Pad.cs index 2a63b7b..d4e2e4e 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.Pad.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.Pad.cs @@ -1,3 +1,5 @@ +using System.Runtime.CompilerServices; + namespace LinkDotNet.StringBuilder; public ref partial struct ValueStringBuilder @@ -7,6 +9,7 @@ public ref partial struct ValueStringBuilder /// /// Total width of the string after padding. /// Character to pad the string with. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void PadLeft(int totalWidth, char paddingChar) { if (totalWidth <= bufferPosition) @@ -27,6 +30,7 @@ public void PadLeft(int totalWidth, char paddingChar) /// /// Total width of the string after padding. /// Character to pad the string with. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void PadRight(int totalWidth, char paddingChar) { if (totalWidth <= bufferPosition) diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilder.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilder.cs index 342da12..a6ef6fe 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilder.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilder.cs @@ -67,7 +67,11 @@ public ValueStringBuilder(int initialCapacity) /// /// The current length of the represented string. /// - public readonly int Length => bufferPosition; + public readonly int Length + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => bufferPosition; + } /// /// Gets the current maximum capacity before the span must be resized. @@ -75,20 +79,29 @@ public ValueStringBuilder(int initialCapacity) /// /// The current maximum capacity before the span must be resized. /// - public readonly int Capacity => buffer.Length; + public readonly int Capacity + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => buffer.Length; + } /// /// Returns the character at the given index or throws an if the index is bigger than the string. /// /// Character position to be retrieved. - public readonly ref char this[int index] => ref buffer[index]; + public readonly ref char this[int index] + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => ref buffer[index]; + } /// /// Defines the implicit conversion of a to . /// /// The string as initial buffer. #pragma warning disable CA2225 - public static implicit operator ValueStringBuilder(string fromString) => new(fromString.AsSpan()); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static implicit operator ValueStringBuilder(string fromString) => new(fromString); #pragma warning restore CA2225 /// @@ -96,6 +109,7 @@ public ValueStringBuilder(int initialCapacity) /// /// The string as initial buffer. #pragma warning disable CA2225 + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator ValueStringBuilder(ReadOnlySpan fromString) => new(fromString); #pragma warning restore CA2225 diff --git a/src/LinkDotNet.StringBuilder/ValueStringBuilderExtensions.cs b/src/LinkDotNet.StringBuilder/ValueStringBuilderExtensions.cs index 1d9dc51..9559ef6 100644 --- a/src/LinkDotNet.StringBuilder/ValueStringBuilderExtensions.cs +++ b/src/LinkDotNet.StringBuilder/ValueStringBuilderExtensions.cs @@ -1,3 +1,5 @@ +using System.Runtime.CompilerServices; + namespace LinkDotNet.StringBuilder; /// @@ -12,9 +14,10 @@ public static class ValueStringBuilderExtensions /// A new instance with the string represented /// by this . /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static System.Text.StringBuilder ToStringBuilder(this ValueStringBuilder builder) { - var stringBuilder = new System.Text.StringBuilder(); + var stringBuilder = new System.Text.StringBuilder(builder.Length); stringBuilder.Append(builder.AsSpan()); return stringBuilder; } @@ -25,6 +28,7 @@ public static System.Text.StringBuilder ToStringBuilder(this ValueStringBuilder /// The builder from which the new instance is derived. /// A new instance with the string represented by this builder. /// Throws if is null. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ValueStringBuilder ToValueStringBuilder(this System.Text.StringBuilder builder) { ArgumentNullException.ThrowIfNull(builder); diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/LinkDotNet.StringBuilder.UnitTests.csproj b/tests/LinkDotNet.StringBuilder.UnitTests/LinkDotNet.StringBuilder.UnitTests.csproj index 78e9126..7181635 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/LinkDotNet.StringBuilder.UnitTests.csproj +++ b/tests/LinkDotNet.StringBuilder.UnitTests/LinkDotNet.StringBuilder.UnitTests.csproj @@ -3,14 +3,15 @@ net8.0;net9.0 enable + enable false true - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs index ccc7b2c..267872f 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs @@ -1,5 +1,3 @@ -using System; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderAppendTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendFormat.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendFormat.Tests.cs index 43cfce4..d4e46d2 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendFormat.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendFormat.Tests.cs @@ -1,5 +1,3 @@ -using System; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderAppendFormatTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendJoin.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendJoin.Tests.cs index 37328f8..b1ca154 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendJoin.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendJoin.Tests.cs @@ -1,6 +1,3 @@ -using System; -using System.Collections.Generic; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderAppendJoinTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Insert.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Insert.Tests.cs index 9b4e4f1..f5b71dd 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Insert.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Insert.Tests.cs @@ -1,5 +1,3 @@ -using System; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderInsertTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Replace.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Replace.Tests.cs index 319812c..57d43e9 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Replace.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Replace.Tests.cs @@ -1,6 +1,3 @@ -using System; -using System.Linq; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderReplaceTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Trim.Tests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Trim.Tests.cs index 8e52ddd..79592b3 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Trim.Tests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Trim.Tests.cs @@ -1,5 +1,3 @@ -using System; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderTrimTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderExtensionsTests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderExtensionsTests.cs index 972e219..88feded 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderExtensionsTests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderExtensionsTests.cs @@ -1,5 +1,3 @@ -using System; - namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderExtensionsTests diff --git a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderTests.cs b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderTests.cs index 255da0a..cbbd280 100644 --- a/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderTests.cs +++ b/tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderTests.cs @@ -1,6 +1,4 @@ -using System; - -namespace LinkDotNet.StringBuilder.UnitTests; +namespace LinkDotNet.StringBuilder.UnitTests; public class ValueStringBuilderTests {