Skip to content

Smdn.Fundamental.ControlPicture version 3.0.1

Latest
Compare
Choose a tag to compare
@smdn smdn released this 17 Oct 11:46
· 1 commit to main since this release
cc61774

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

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