fix: fix marshal of decimal for netstandard 2.1

This commit is contained in:
Oliver Booth 2023-08-23 16:54:20 +01:00
parent caa0070458
commit 30b7a465a7
Signed by: oliverbooth
GPG Key ID: B89D139977693FED
1 changed files with 13 additions and 6 deletions

View File

@ -1,4 +1,4 @@
using System.Diagnostics.Contracts; using System.Diagnostics.Contracts;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
namespace X10D.IO; namespace X10D.IO;
@ -97,15 +97,22 @@ public static class DecimalExtensions
#else #else
Span<byte> buffer = stackalloc byte[16]; Span<byte> buffer = stackalloc byte[16];
MemoryMarshal.Write(buffer, ref value); MemoryMarshal.Write(buffer, ref value);
WriteBits(destination, buffer);
#endif
}
private static void WriteBits(Span<int> destination, Span<byte> buffer)
{
var flags = MemoryMarshal.Read<int>(buffer[..4]); var flags = MemoryMarshal.Read<int>(buffer[..4]);
var hi = MemoryMarshal.Read<int>(buffer[4..8]); var hi = MemoryMarshal.Read<int>(buffer[4..8]);
var lo = MemoryMarshal.Read<long>(buffer[8..]); var lo = MemoryMarshal.Read<long>(buffer[8..]);
destination[0] = flags; var low = (uint)lo;
destination[1] = hi; var mid = (uint)(lo >> 32);
destination[2] = (int)(lo & 0xFFFFFFFF);
destination[3] = (int)(lo >> 32); destination[0] = (int)low;
#endif destination[1] = (int)mid;
destination[2] = hi;
destination[3] = flags;
} }
} }