diff --git a/Src/PngDecoder/Extension/GenericHelper.cs b/Src/PngDecoder/Extension/GenericHelper.cs index 7135f50..75ed2fe 100644 --- a/Src/PngDecoder/Extension/GenericHelper.cs +++ b/Src/PngDecoder/Extension/GenericHelper.cs @@ -1,60 +1,16 @@ -using System.Diagnostics; + using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; namespace PngDecoder.Extension; internal static class GenericHelper { - [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] - private static extern int memcmp(IntPtr a1, IntPtr a2, uint count); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static bool Equal(ReadOnlySpan data1, ReadOnlySpan data2) => + data1.SequenceEqual(data2); - internal static unsafe bool Equal(byte[] data1, byte[] data2) - { - if (data1 is null || data2 is null || data1.Length != data2.Length) - return false; - - fixed (byte* p1 = data1, p2 = data2) - return memcmp((IntPtr)p1, (IntPtr)p2, (uint)data1.Length * sizeof(byte)) == 0; - } - - - internal static unsafe bool Equal(ReadOnlySpan data1, ReadOnlySpan data2) - { - if (data1.Length != data2.Length) - return false; - - fixed (byte* p1 = data1, p2 = data2) - return memcmp((IntPtr)p1, (IntPtr)p2, (uint)data1.Length * sizeof(byte)) == 0; - } - - - - internal static byte[] Tobytes(this ValueType @struct) - { - var result = new byte[Marshal.SizeOf(@struct)]; - Unsafe.As(ref result[0]) = @struct; - return result; - } - - internal static T ToStruct(this byte[] @bytes) where T : struct => - Unsafe.As(ref @bytes[0]); internal static T ToStruct(this Span @bytes) where T : struct => Unsafe.As(ref @bytes[0]); - internal static T FromStream(this Stream stream, - long skip = 0, - SeekOrigin origin = SeekOrigin.Current) where T : struct - { - var size = Marshal.SizeOf(typeof(T)); - Span resultAsByte = stackalloc byte[size]; - stream.Seek(skip, origin); - - var read = stream.Read(resultAsByte); - Debug.Assert(read == size); - - return resultAsByte.ToStruct(); - } - internal static byte ReadByteNotMove(this Stream stream, long index) { var current = stream.Position; diff --git a/Src/PngDecoder/PngDecoder.csproj b/Src/PngDecoder/PngDecoder.csproj index d8030d2..fa71b7a 100644 --- a/Src/PngDecoder/PngDecoder.csproj +++ b/Src/PngDecoder/PngDecoder.csproj @@ -4,7 +4,6 @@ net8.0 enable enable - true