Released package
Release notes
The full release notes are available at gist.
Change log
Change log in this release:
- 2024-10-17 update assembly version
- 2024-10-17 add target framework net8.0
- 2024-10-17 reduce copying buffers using with String.Create
- 2023-12-19 disable warning CS1591
- 2023-05-11 compliant IDE0030; empty the root namespace so that the namespace is determined only by the directory name
- 2023-01-05 drop net5.0 from target frameworks
API changes
API changes in this release:
diff --git a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net45.apilist.cs b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net45.apilist.cs
index 822a4f9d..c5a3e725 100644
--- a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net45.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net45.apilist.cs
@@ -1,34 +1,34 @@
-// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.0.1)
+// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.1)
// Name: Smdn.Fundamental.ControlPicture
-// AssemblyVersion: 3.0.0.1
-// InformationalVersion: 3.0.0.1+dc20ebef71437f6ae0e2cacb43e17d83d13c8ef0
+// AssemblyVersion: 3.0.1.0
+// InformationalVersion: 3.0.1+1d6abeeaf6f311d1bb60ddb613a71de6c47dc6a8
// TargetFramework: .NETFramework,Version=v4.5
// Configuration: Release
// Referenced assemblies:
// System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Text.Encodings.Web, Version=4.0.3.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
using System;
using System.Buffers;
namespace Smdn.Text.Unicode.ControlPictures {
public static class ReadOnlySequenceExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySequence<byte> sequence) {}
public static bool TryPicturizeControlChars(this ReadOnlySequence<byte> sequence, Span<char> destination) {}
}
public static class ReadOnlySpanExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySpan<byte> span) {}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<byte> span, Span<char> destination) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<char> span, Span<char> destination) {}
}
public static class StringExtensions {
public static string ToControlCharsPicturized(this string str) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.1.7.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net461.apilist.cs b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net461.apilist.cs
index 85ac95f0..398ddab3 100644
--- a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net461.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net461.apilist.cs
@@ -1,34 +1,34 @@
-// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.0.1)
+// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.1)
// Name: Smdn.Fundamental.ControlPicture
-// AssemblyVersion: 3.0.0.1
-// InformationalVersion: 3.0.0.1+dc20ebef71437f6ae0e2cacb43e17d83d13c8ef0
+// AssemblyVersion: 3.0.1.0
+// InformationalVersion: 3.0.1+1d6abeeaf6f311d1bb60ddb613a71de6c47dc6a8
// TargetFramework: .NETFramework,Version=v4.6.1
// Configuration: Release
// Referenced assemblies:
// System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Text.Encodings.Web, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
using System;
using System.Buffers;
namespace Smdn.Text.Unicode.ControlPictures {
public static class ReadOnlySequenceExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySequence<byte> sequence) {}
public static bool TryPicturizeControlChars(this ReadOnlySequence<byte> sequence, Span<char> destination) {}
}
public static class ReadOnlySpanExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySpan<byte> span) {}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<byte> span, Span<char> destination) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<char> span, Span<char> destination) {}
}
public static class StringExtensions {
public static string ToControlCharsPicturized(this string str) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.1.7.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net6.0.apilist.cs b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net6.0.apilist.cs
index 7c2b061c..19b2d776 100644
--- a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net6.0.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net6.0.apilist.cs
@@ -1,33 +1,34 @@
-// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.0.1)
+// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.1)
// Name: Smdn.Fundamental.ControlPicture
-// AssemblyVersion: 3.0.0.1
-// InformationalVersion: 3.0.0.1+dc20ebef71437f6ae0e2cacb43e17d83d13c8ef0
+// AssemblyVersion: 3.0.1.0
+// InformationalVersion: 3.0.1+1d6abeeaf6f311d1bb60ddb613a71de6c47dc6a8
// TargetFramework: .NETCoreApp,Version=v6.0
// Configuration: Release
// Referenced assemblies:
// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Text.Encodings.Web, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
using System;
using System.Buffers;
namespace Smdn.Text.Unicode.ControlPictures {
public static class ReadOnlySequenceExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySequence<byte> sequence) {}
public static bool TryPicturizeControlChars(this ReadOnlySequence<byte> sequence, Span<char> destination) {}
}
public static class ReadOnlySpanExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySpan<byte> span) {}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<byte> span, Span<char> destination) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<char> span, Span<char> destination) {}
}
public static class StringExtensions {
public static string ToControlCharsPicturized(this string str) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.1.7.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net5.0.apilist.cs b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net8.0.apilist.cs
similarity index 60%
rename from doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net5.0.apilist.cs
rename to doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net8.0.apilist.cs
index a558aefd..e6af8209 100644
--- a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net5.0.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-net8.0.apilist.cs
@@ -1,27 +1,33 @@
-// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.0.1)
+// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.1)
// Name: Smdn.Fundamental.ControlPicture
-// AssemblyVersion: 3.0.0.1
-// InformationalVersion: 3.0.0.1+dc20ebef71437f6ae0e2cacb43e17d83d13c8ef0
-// TargetFramework: .NETCoreApp,Version=v5.0
+// AssemblyVersion: 3.0.1.0
+// InformationalVersion: 3.0.1+1d6abeeaf6f311d1bb60ddb613a71de6c47dc6a8
+// TargetFramework: .NETCoreApp,Version=v8.0
// Configuration: Release
+// Referenced assemblies:
+// System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
+// System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+// System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
using System;
using System.Buffers;
namespace Smdn.Text.Unicode.ControlPictures {
public static class ReadOnlySequenceExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySequence<byte> sequence) {}
public static bool TryPicturizeControlChars(this ReadOnlySequence<byte> sequence, Span<char> destination) {}
}
public static class ReadOnlySpanExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySpan<byte> span) {}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<byte> span, Span<char> destination) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<char> span, Span<char> destination) {}
}
public static class StringExtensions {
public static string ToControlCharsPicturized(this string str) {}
}
}
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard1.6.apilist.cs b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard1.6.apilist.cs
index d0a15159..c5e6e85b 100644
--- a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard1.6.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard1.6.apilist.cs
@@ -1,36 +1,36 @@
-// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.0.1)
+// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.1)
// Name: Smdn.Fundamental.ControlPicture
-// AssemblyVersion: 3.0.0.1
-// InformationalVersion: 3.0.0.1+dc20ebef71437f6ae0e2cacb43e17d83d13c8ef0
+// AssemblyVersion: 3.0.1.0
+// InformationalVersion: 3.0.1+1d6abeeaf6f311d1bb60ddb613a71de6c47dc6a8
// TargetFramework: .NETStandard,Version=v1.6
// Configuration: Release
// Referenced assemblies:
// System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Runtime.InteropServices, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Text.Encodings.Web, Version=4.0.3.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
using System;
using System.Buffers;
namespace Smdn.Text.Unicode.ControlPictures {
public static class ReadOnlySequenceExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySequence<byte> sequence) {}
public static bool TryPicturizeControlChars(this ReadOnlySequence<byte> sequence, Span<char> destination) {}
}
public static class ReadOnlySpanExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySpan<byte> span) {}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<byte> span, Span<char> destination) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<char> span, Span<char> destination) {}
}
public static class StringExtensions {
public static string ToControlCharsPicturized(this string str) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.1.7.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard2.1.apilist.cs
index 422187b1..405acb69 100644
--- a/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture-netstandard2.1.apilist.cs
@@ -1,32 +1,33 @@
-// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.0.1)
+// Smdn.Fundamental.ControlPicture.dll (Smdn.Fundamental.ControlPicture-3.0.1)
// Name: Smdn.Fundamental.ControlPicture
-// AssemblyVersion: 3.0.0.1
-// InformationalVersion: 3.0.0.1+dc20ebef71437f6ae0e2cacb43e17d83d13c8ef0
+// AssemblyVersion: 3.0.1.0
+// InformationalVersion: 3.0.1+1d6abeeaf6f311d1bb60ddb613a71de6c47dc6a8
// TargetFramework: .NETStandard,Version=v2.1
// Configuration: Release
// Referenced assemblies:
+// System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// System.Text.Encodings.Web, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
// netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
using System;
using System.Buffers;
namespace Smdn.Text.Unicode.ControlPictures {
public static class ReadOnlySequenceExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySequence<byte> sequence) {}
public static bool TryPicturizeControlChars(this ReadOnlySequence<byte> sequence, Span<char> destination) {}
}
public static class ReadOnlySpanExtensions {
public static string ToControlCharsPicturizedString(this ReadOnlySpan<byte> span) {}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<byte> span, Span<char> destination) {}
public static bool TryPicturizeControlChars(this ReadOnlySpan<char> span, Span<char> destination) {}
}
public static class StringExtensions {
public static string ToControlCharsPicturized(this string str) {}
}
}
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.1.7.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.2.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
Full changes
Full changes in this release:
diff --git a/src/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture.csproj b/src/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture.csproj
index 29fd3cfb..e9d2bf50 100644
--- a/src/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture.csproj
+++ b/src/Smdn.Fundamental.ControlPicture/Smdn.Fundamental.ControlPicture.csproj
@@ -4,10 +4,13 @@ SPDX-License-Identifier: MIT
-->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFrameworks>net6.0;net5.0;net461;net45;netstandard2.1;netstandard1.6</TargetFrameworks>
- <VersionPrefix>3.0.0.1</VersionPrefix>
+ <TargetFrameworks>net8.0;net6.0;net461;net45;netstandard2.1;netstandard1.6</TargetFrameworks>
+ <VersionPrefix>3.0.1</VersionPrefix>
<VersionSuffix></VersionSuffix>
<PackageValidationBaselineVersion>3.0.0</PackageValidationBaselineVersion>
+ <RootNamespace/> <!-- empty the root namespace so that the namespace is determined only by the directory name, for code style rule IDE0030 -->
+ <NoWarn>CS1591;$(NoWarn)</NoWarn> <!-- CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' -->
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Label="assembly attributes">
diff --git a/src/Smdn.Fundamental.ControlPicture/Smdn.Text.Unicode.ControlPictures/ReadOnlySpanExtensions.cs b/src/Smdn.Fundamental.ControlPicture/Smdn.Text.Unicode.ControlPictures/ReadOnlySpanExtensions.cs
index 923e149c..59217b2e 100644
--- a/src/Smdn.Fundamental.ControlPicture/Smdn.Text.Unicode.ControlPictures/ReadOnlySpanExtensions.cs
+++ b/src/Smdn.Fundamental.ControlPicture/Smdn.Text.Unicode.ControlPictures/ReadOnlySpanExtensions.cs
@@ -1,8 +1,16 @@
// SPDX-FileCopyrightText: 2021 smdn <smdn@smdn.jp>
// SPDX-License-Identifier: MIT
+#if SYSTEM_STRING_CREATE && SYSTEM_RUNTIME_COMPILERSERVICES_UNSAFE && SYSTEM_RUNTIME_INTEROPSERVICES_MEMORYMARSHAL
+#define STRING_CREATE_WITH_STATE_OF_READONLYSPAN
+#endif
using System;
+#if STRING_CREATE_WITH_STATE_OF_READONLYSPAN
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+#else
using System.Buffers;
+#endif
using System.Text.Unicode;
namespace Smdn.Text.Unicode.ControlPictures;
@@ -54,6 +62,25 @@ public static class ReadOnlySpanExtensions {
if (span.IsEmpty)
return string.Empty;
+#if STRING_CREATE_WITH_STATE_OF_READONLYSPAN
+ // ref: https://github.com/dotnet/runtime/issues/30175#issuecomment-1343179127
+ unsafe {
+ ref var refInput = ref MemoryMarshal.GetReference(span);
+ var ptrInput = (IntPtr)Unsafe.AsPointer(ref refInput);
+
+ return string.Create(
+ span.Length,
+ (Pointer: ptrInput, span.Length),
+ static (destination, input) => _ = TryPicturizeControlChars(
+ span: new ReadOnlySpan<byte>(
+ pointer: input.Pointer.ToPointer(),
+ length: input.Length
+ ),
+ destination: destination
+ )
+ );
+ }
+#else
char[] buffer = null;
try {
@@ -76,6 +103,7 @@ public static class ReadOnlySpanExtensions {
if (buffer is not null)
ArrayPool<char>.Shared.Return(buffer);
}
+#endif
}
public static string ToControlCharsPicturizedString(this ReadOnlySpan<char> span)
@@ -83,6 +111,25 @@ public static class ReadOnlySpanExtensions {
if (span.IsEmpty)
return string.Empty;
+#if STRING_CREATE_WITH_STATE_OF_READONLYSPAN
+ // ref: https://github.com/dotnet/runtime/issues/30175#issuecomment-1343179127
+ unsafe {
+ ref var refInput = ref MemoryMarshal.GetReference(span);
+ var ptrInput = (IntPtr)Unsafe.AsPointer(ref refInput);
+
+ return string.Create(
+ span.Length,
+ (Pointer: ptrInput, span.Length),
+ static (destination, input) => _ = TryPicturizeControlChars(
+ span: new ReadOnlySpan<char>(
+ pointer: input.Pointer.ToPointer(),
+ length: input.Length
+ ),
+ destination: destination
+ )
+ );
+ }
+#else
char[] buffer = null;
try {
@@ -105,5 +152,6 @@ public static class ReadOnlySpanExtensions {
if (buffer is not null)
ArrayPool<char>.Shared.Return(buffer);
}
+#endif
}
}
Notes
Full Changelog: releases/Smdn.Fundamental.ControlPicture-3.0.0.1...releases/Smdn.Fundamental.ControlPicture-3.0.1