summary refs log tree commit diff
path: root/crypto/src/util/Spans.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/util/Spans.cs')
-rw-r--r--crypto/src/util/Spans.cs24
1 files changed, 24 insertions, 0 deletions
diff --git a/crypto/src/util/Spans.cs b/crypto/src/util/Spans.cs
index 5e1b3737c..fa2b768d9 100644
--- a/crypto/src/util/Spans.cs
+++ b/crypto/src/util/Spans.cs
@@ -9,10 +9,34 @@ namespace Org.BouncyCastle.Utilities
     internal static class Spans
     {
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        internal static void CopyFrom<T>(this Span<T> output, ReadOnlySpan<T> input)
+        {
+            input[..output.Length].CopyTo(output);
+        }
+
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        internal static Span<T> FromNullable<T>(T[]? array)
+        {
+            return array == null ? Span<T>.Empty : array.AsSpan();
+        }
+
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
         internal static Span<T> FromNullable<T>(T[]? array, int start)
         {
             return array == null ? Span<T>.Empty : array.AsSpan(start);
         }
+
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        internal static ReadOnlySpan<T> FromNullableReadOnly<T>(T[]? array)
+        {
+            return array == null ? Span<T>.Empty : array.AsSpan();
+        }
+
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        internal static ReadOnlySpan<T> FromNullableReadOnly<T>(T[]? array, int start)
+        {
+            return array == null ? Span<T>.Empty : array.AsSpan(start);
+        }
     }
 }
 #endif