Skip to content

Commit 739c7b0

Browse files
authored
Void ReadOnlySpan<byte>.ToString(). (#253)
1 parent 5a0be77 commit 739c7b0

File tree

12 files changed

+119
-0
lines changed

12 files changed

+119
-0
lines changed

api_list.include.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@
7474
* `bool TryFormat(double, Span<char>, int, ReadOnlySpan<char>, IFormatProvider?)` [reference](https://learn.microsoft.com/en-us/dotnet/api/system.double.tryformat)
7575

7676

77+
#### Encoding
78+
79+
* `int GetBytes(ReadOnlySpan<char>, Span<byte>)`
80+
* `string GetString(ReadOnlySpan<byte>)`
81+
82+
7783
#### EventInfo
7884

7985
* `NullabilityState GetNullability(EventInfo)`

readme.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,12 @@ The class `Polyfill` includes the following extension methods:
528528
* `bool TryFormat(double, Span<char>, int, ReadOnlySpan<char>, IFormatProvider?)` [reference](https://learn.microsoft.com/en-us/dotnet/api/system.double.tryformat)
529529

530530

531+
#### Encoding
532+
533+
* `int GetBytes(ReadOnlySpan<char>, Span<byte>)`
534+
* `string GetString(ReadOnlySpan<byte>)`
535+
536+
531537
#### EventInfo
532538

533539
* `NullabilityState GetNullability(EventInfo)`

src/Polyfill/Numbers/BytePolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out byte
3636
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out byte result) =>
3737
#if NET8_0_OR_GREATER
3838
byte.TryParse(target, provider, out result);
39+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
40+
byte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3941
#else
4042
byte.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4143
#endif
@@ -69,6 +71,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6971
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out byte result) =>
7072
#if NET8_0_OR_GREATER
7173
byte.TryParse(target, style, provider, out result);
74+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
75+
byte.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7276
#else
7377
byte.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7478
#endif
@@ -80,6 +84,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
8084
public static bool TryParse(ReadOnlySpan<byte> target, out byte result) =>
8185
#if NET8_0_OR_GREATER
8286
byte.TryParse(target, out result);
87+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
88+
byte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8389
#else
8490
byte.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8591
#endif

src/Polyfill/Numbers/DoublePolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out doubl
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out double result) =>
3636
#if NET8_0_OR_GREATER
3737
double.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
double.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Float, provider, out result);
3840
#else
3941
double.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Float, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out double result) =>
6971
#if NET8_0_OR_GREATER
7072
double.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
double.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
double.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out double result) =>
8084
#if NET8_0_OR_GREATER
8185
double.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
double.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Float, null, out result);
8288
#else
8389
double.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Float, null, out result);
8490
#endif

src/Polyfill/Numbers/IntPolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out int r
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out int result) =>
3636
#if NET8_0_OR_GREATER
3737
int.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
int.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3840
#else
3941
int.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out int result) =>
6971
#if NET8_0_OR_GREATER
7072
int.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
int.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
int.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out int result) =>
8084
#if NET8_0_OR_GREATER
8185
int.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
int.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8288
#else
8389
int.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8490
#endif

src/Polyfill/Numbers/LongPolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out int r
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out int result) =>
3636
#if NET8_0_OR_GREATER
3737
int.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
int.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3840
#else
3941
int.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out int result) =>
6971
#if NET8_0_OR_GREATER
7072
int.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
int.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
int.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out int result) =>
8084
#if NET8_0_OR_GREATER
8185
int.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
int.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8288
#else
8389
int.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8490
#endif

src/Polyfill/Numbers/SBytePolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out sbyte
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out sbyte result) =>
3636
#if NET8_0_OR_GREATER
3737
sbyte.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
sbyte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3840
#else
3941
sbyte.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out sbyte result) =>
6971
#if NET8_0_OR_GREATER
7072
sbyte.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
sbyte.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
sbyte.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out sbyte result) =>
8084
#if NET8_0_OR_GREATER
8185
sbyte.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
sbyte.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8288
#else
8389
sbyte.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8490
#endif

src/Polyfill/Numbers/ShortPolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out short
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out short result) =>
3636
#if NET8_0_OR_GREATER
3737
short.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
short.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3840
#else
3941
short.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out short result) =>
6971
#if NET8_0_OR_GREATER
7072
short.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
short.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
short.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out short result) =>
8084
#if NET8_0_OR_GREATER
8185
short.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
short.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8288
#else
8389
short.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8490
#endif

src/Polyfill/Numbers/UIntPolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out uint
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out uint result) =>
3636
#if NET8_0_OR_GREATER
3737
uint.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
uint.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3840
#else
3941
uint.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out uint result) =>
6971
#if NET8_0_OR_GREATER
7072
uint.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
uint.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
uint.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out uint result) =>
8084
#if NET8_0_OR_GREATER
8185
uint.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
uint.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8288
#else
8389
uint.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8490
#endif

src/Polyfill/Numbers/ULongPolyfill.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public static bool TryParse(string? target, IFormatProvider? provider, out ulong
3535
public static bool TryParse(ReadOnlySpan<byte> target, IFormatProvider? provider, out ulong result) =>
3636
#if NET8_0_OR_GREATER
3737
ulong.TryParse(target, provider, out result);
38+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
39+
ulong.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, provider, out result);
3840
#else
3941
ulong.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, provider, out result);
4042
#endif
@@ -68,6 +70,8 @@ public static bool TryParse(ReadOnlySpan<char> target, IFormatProvider? provider
6870
public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IFormatProvider? provider, out ulong result) =>
6971
#if NET8_0_OR_GREATER
7072
ulong.TryParse(target, style, provider, out result);
73+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
74+
ulong.TryParse(Encoding.UTF8.GetString(target), style, provider, out result);
7175
#else
7276
ulong.TryParse(Encoding.UTF8.GetString(target.ToArray()), style, provider, out result);
7377
#endif
@@ -79,6 +83,8 @@ public static bool TryParse(ReadOnlySpan<byte> target, NumberStyles style, IForm
7983
public static bool TryParse(ReadOnlySpan<byte> target, out ulong result) =>
8084
#if NET8_0_OR_GREATER
8185
ulong.TryParse(target, out result);
86+
#elif FeatureMemory && AllowUnsafeBlocks || NETCOREAPP2_1_OR_GREATER
87+
ulong.TryParse(Encoding.UTF8.GetString(target), NumberStyles.Integer, null, out result);
8288
#else
8389
ulong.TryParse(Encoding.UTF8.GetString(target.ToArray()), NumberStyles.Integer, null, out result);
8490
#endif

0 commit comments

Comments
 (0)