From e32d6e1a82e51ea4919ee522da9ca3a29a1c669e Mon Sep 17 00:00:00 2001 From: Jason Nelson Date: Wed, 21 Mar 2018 09:55:06 -0700 Subject: [PATCH] Use Span.CopyTo Fast span has an optimized fast path --- src/ImageSharp/Memory/SpanHelper.cs | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/src/ImageSharp/Memory/SpanHelper.cs b/src/ImageSharp/Memory/SpanHelper.cs index 3bad54a12..1cfad7222 100644 --- a/src/ImageSharp/Memory/SpanHelper.cs +++ b/src/ImageSharp/Memory/SpanHelper.cs @@ -37,26 +37,7 @@ namespace SixLabors.ImageSharp.Memory public static unsafe void Copy(ReadOnlySpan source, Span destination, int count) where T : struct { - DebugGuard.MustBeLessThanOrEqualTo(count, source.Length, nameof(count)); - DebugGuard.MustBeLessThanOrEqualTo(count, destination.Length, nameof(count)); - - ref byte srcRef = ref Unsafe.As(ref MemoryMarshal.GetReference(source)); - ref byte destRef = ref Unsafe.As(ref MemoryMarshal.GetReference(destination)); - - int byteCount = Unsafe.SizeOf() * count; - - // TODO: Use unfixed Unsafe.CopyBlock(ref T, ref T, int) for small blocks, when it gets available! - // This is now available. Check with Anton re intent. Do we replace both ifdefs? - fixed (byte* pSrc = &srcRef) - fixed (byte* pDest = &destRef) - { -#if NETSTANDARD1_1 - Unsafe.CopyBlock(pDest, pSrc, (uint)byteCount); -#else - int destLength = destination.Length * Unsafe.SizeOf(); - Buffer.MemoryCopy(pSrc, pDest, destLength, byteCount); -#endif - } + source.Slice(0, count).CopyTo(destination); } ///