Skip to content

Commit fa0b4b7

Browse files
authored
Merge pull request #246 from Joy-less/various-improvements
Various improvements
2 parents f45beb2 + 232892e commit fa0b4b7

17 files changed

+37
-31
lines changed

src/LinkDotNet.StringBuilder/LinkDotNet.StringBuilder.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
</PropertyGroup>
4343

4444
<ItemGroup>
45-
<PackageReference Include="Meziantou.Analyzer" Version="2.0.188">
45+
<PackageReference Include="Meziantou.Analyzer" Version="2.0.189">
4646
<PrivateAssets>all</PrivateAssets>
4747
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
4848
</PackageReference>

src/LinkDotNet.StringBuilder/ValueStringBuilder.AppendFormat.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,7 @@ public void AppendFormat<T1, T2, T3, T4, T5>(
362362
[MethodImpl(MethodImplOptions.AggressiveInlining)]
363363
private static int GetValidArgumentIndex(ReadOnlySpan<char> placeholder, int allowedRange)
364364
{
365-
#pragma warning disable MA0011
366-
if (!int.TryParse(placeholder[1..^1], out var argIndex))
367-
#pragma warning restore MA0011
365+
if (!int.TryParse(placeholder[1..^1], null, out var argIndex))
368366
{
369367
throw new FormatException("Invalid argument index in format string: " + placeholder.ToString());
370368
}

src/LinkDotNet.StringBuilder/ValueStringBuilder.Concat.Helper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public static string Concat<T>(params T[] values)
2020

2121
using var sb = new ValueStringBuilder(stackalloc char[128]);
2222
sb.AppendJoin(string.Empty, values);
23+
2324
return sb.ToString();
2425
}
2526

src/LinkDotNet.StringBuilder/ValueStringBuilder.EnsureCapacity.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ ref Unsafe.As<char, byte>(ref sourceRef),
4949
/// Finds the smallest power of 2 which is greater than or equal to <paramref name="minimum"/>.
5050
/// </summary>
5151
/// <param name="minimum">The value the result should be greater than or equal to.</param>
52-
/// <returns>The smallest power of 2 >= <paramref name="minimum"/>.</returns>
52+
/// <returns>The smallest power of 2 &gt;= <paramref name="minimum"/>.</returns>
53+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
5354
private static int FindSmallestPowerOf2Above(int minimum)
5455
{
5556
return 1 << (int)Math.Ceiling(Math.Log2(minimum));

src/LinkDotNet.StringBuilder/ValueStringBuilder.Enumerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public ref partial struct ValueStringBuilder
99
/// Creates an enumerator over the characters in the builder.
1010
/// </summary>
1111
/// <returns>An enumerator over the characters in the builder.</returns>
12+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1213
public readonly Enumerator GetEnumerator() => new(buffer[..bufferPosition]);
1314

1415
/// <summary>Enumerates the elements of a <see cref="Span{T}"/>.</summary>

src/LinkDotNet.StringBuilder/ValueStringBuilder.Pad.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System.Runtime.CompilerServices;
2+
13
namespace LinkDotNet.StringBuilder;
24

35
public ref partial struct ValueStringBuilder
@@ -7,6 +9,7 @@ public ref partial struct ValueStringBuilder
79
/// </summary>
810
/// <param name="totalWidth">Total width of the string after padding.</param>
911
/// <param name="paddingChar">Character to pad the string with.</param>
12+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1013
public void PadLeft(int totalWidth, char paddingChar)
1114
{
1215
if (totalWidth <= bufferPosition)
@@ -27,6 +30,7 @@ public void PadLeft(int totalWidth, char paddingChar)
2730
/// </summary>
2831
/// <param name="totalWidth">Total width of the string after padding.</param>
2932
/// <param name="paddingChar">Character to pad the string with.</param>
33+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3034
public void PadRight(int totalWidth, char paddingChar)
3135
{
3236
if (totalWidth <= bufferPosition)

src/LinkDotNet.StringBuilder/ValueStringBuilder.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,35 +67,49 @@ public ValueStringBuilder(int initialCapacity)
6767
/// <value>
6868
/// The current length of the represented string.
6969
/// </value>
70-
public readonly int Length => bufferPosition;
70+
public readonly int Length
71+
{
72+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
73+
get => bufferPosition;
74+
}
7175

7276
/// <summary>
7377
/// Gets the current maximum capacity before the span must be resized.
7478
/// </summary>
7579
/// <value>
7680
/// The current maximum capacity before the span must be resized.
7781
/// </value>
78-
public readonly int Capacity => buffer.Length;
82+
public readonly int Capacity
83+
{
84+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
85+
get => buffer.Length;
86+
}
7987

8088
/// <summary>
8189
/// Returns the character at the given index or throws an <see cref="IndexOutOfRangeException"/> if the index is bigger than the string.
8290
/// </summary>
8391
/// <param name="index">Character position to be retrieved.</param>
84-
public readonly ref char this[int index] => ref buffer[index];
92+
public readonly ref char this[int index]
93+
{
94+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
95+
get => ref buffer[index];
96+
}
8597

8698
/// <summary>
8799
/// Defines the implicit conversion of a <see cref="string"/> to <see cref="ValueStringBuilder"/>.
88100
/// </summary>
89101
/// <param name="fromString">The string as initial buffer.</param>
90102
#pragma warning disable CA2225
91-
public static implicit operator ValueStringBuilder(string fromString) => new(fromString.AsSpan());
103+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
104+
public static implicit operator ValueStringBuilder(string fromString) => new(fromString);
92105
#pragma warning restore CA2225
93106

94107
/// <summary>
95108
/// Defines the implicit conversion of a <see cref="ReadOnlySpan{Char}"/> to <see cref="ValueStringBuilder"/>.
96109
/// </summary>
97110
/// <param name="fromString">The string as initial buffer.</param>
98111
#pragma warning disable CA2225
112+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
99113
public static implicit operator ValueStringBuilder(ReadOnlySpan<char> fromString) => new(fromString);
100114
#pragma warning restore CA2225
101115

src/LinkDotNet.StringBuilder/ValueStringBuilderExtensions.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System.Runtime.CompilerServices;
2+
13
namespace LinkDotNet.StringBuilder;
24

35
/// <summary>
@@ -12,9 +14,10 @@ public static class ValueStringBuilderExtensions
1214
/// <returns>A new <see cref="System.Text.StringBuilder"/> instance with the string represented
1315
/// by this <paramref name="builder"/>.
1416
/// </returns>
17+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1518
public static System.Text.StringBuilder ToStringBuilder(this ValueStringBuilder builder)
1619
{
17-
var stringBuilder = new System.Text.StringBuilder();
20+
var stringBuilder = new System.Text.StringBuilder(builder.Length);
1821
stringBuilder.Append(builder.AsSpan());
1922
return stringBuilder;
2023
}
@@ -25,6 +28,7 @@ public static System.Text.StringBuilder ToStringBuilder(this ValueStringBuilder
2528
/// <param name="builder">The builder from which the new instance is derived.</param>
2629
/// <returns>A new <see cref="ValueStringBuilder"/> instance with the string represented by this builder.</returns>
2730
/// <exception cref="ArgumentNullException">Throws if <paramref name="builder"/> is null.</exception>
31+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2832
public static ValueStringBuilder ToValueStringBuilder(this System.Text.StringBuilder builder)
2933
{
3034
ArgumentNullException.ThrowIfNull(builder);

tests/LinkDotNet.StringBuilder.UnitTests/LinkDotNet.StringBuilder.UnitTests.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
<PropertyGroup>
44
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
55
<Nullable>enable</Nullable>
6+
<ImplicitUsings>enable</ImplicitUsings>
67
<IsPackable>false</IsPackable>
78
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
89
</PropertyGroup>
910

1011
<ItemGroup>
11-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
1213
<PackageReference Include="Shouldly" Version="4.3.0" />
13-
<PackageReference Include="xunit.v3" Version="1.0.1" />
14+
<PackageReference Include="xunit.v3" Version="2.0.0" />
1415
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
1516
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1617
<PrivateAssets>all</PrivateAssets>

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Append.Tests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
31
namespace LinkDotNet.StringBuilder.UnitTests;
42

53
public class ValueStringBuilderAppendTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendFormat.Tests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
31
namespace LinkDotNet.StringBuilder.UnitTests;
42

53
public class ValueStringBuilderAppendFormatTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.AppendJoin.Tests.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
using System;
2-
using System.Collections.Generic;
3-
41
namespace LinkDotNet.StringBuilder.UnitTests;
52

63
public class ValueStringBuilderAppendJoinTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Insert.Tests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
31
namespace LinkDotNet.StringBuilder.UnitTests;
42

53
public class ValueStringBuilderInsertTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Replace.Tests.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
using System;
2-
using System.Linq;
3-
41
namespace LinkDotNet.StringBuilder.UnitTests;
52

63
public class ValueStringBuilderReplaceTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilder.Trim.Tests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
31
namespace LinkDotNet.StringBuilder.UnitTests;
42

53
public class ValueStringBuilderTrimTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderExtensionsTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
31
namespace LinkDotNet.StringBuilder.UnitTests;
42

53
public class ValueStringBuilderExtensionsTests

tests/LinkDotNet.StringBuilder.UnitTests/ValueStringBuilderTests.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
3-
namespace LinkDotNet.StringBuilder.UnitTests;
1+
namespace LinkDotNet.StringBuilder.UnitTests;
42

53
public class ValueStringBuilderTests
64
{

0 commit comments

Comments
 (0)