mirror of
https://github.com/oliverbooth/X10D
synced 2024-11-09 23:25:43 +00:00
Compare commits
2 Commits
ed46bcd0d8
...
30b7a465a7
Author | SHA1 | Date | |
---|---|---|---|
30b7a465a7 | |||
caa0070458 |
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,11 +48,11 @@ public static class DoubleExtensions
|
|||||||
#else
|
#else
|
||||||
if (BitConverter.IsLittleEndian)
|
if (BitConverter.IsLittleEndian)
|
||||||
{
|
{
|
||||||
return MemoryMarshal.TryWrite(destination, ref value);
|
long tmp = BinaryPrimitives.ReverseEndianness(BitConverter.DoubleToInt64Bits(value));
|
||||||
|
return MemoryMarshal.TryWrite(destination, ref tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
long tmp = BinaryPrimitives.ReverseEndianness(BitConverter.DoubleToInt64Bits(value));
|
return MemoryMarshal.TryWrite(destination, ref value);
|
||||||
return MemoryMarshal.TryWrite(destination, ref tmp);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ public static class DoubleExtensions
|
|||||||
#if NET5_0_OR_GREATER
|
#if NET5_0_OR_GREATER
|
||||||
return BinaryPrimitives.TryWriteDoubleLittleEndian(destination, value);
|
return BinaryPrimitives.TryWriteDoubleLittleEndian(destination, value);
|
||||||
#else
|
#else
|
||||||
if (!BitConverter.IsLittleEndian)
|
if (BitConverter.IsLittleEndian)
|
||||||
{
|
{
|
||||||
return MemoryMarshal.TryWrite(destination, ref value);
|
return MemoryMarshal.TryWrite(destination, ref value);
|
||||||
}
|
}
|
||||||
|
@ -50,11 +50,11 @@ public static class SingleExtensions
|
|||||||
#else
|
#else
|
||||||
if (BitConverter.IsLittleEndian)
|
if (BitConverter.IsLittleEndian)
|
||||||
{
|
{
|
||||||
return MemoryMarshal.TryWrite(destination, ref value);
|
int tmp = BinaryPrimitives.ReverseEndianness(BitConverter.SingleToInt32Bits(value));
|
||||||
|
return MemoryMarshal.TryWrite(destination, ref tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int tmp = BinaryPrimitives.ReverseEndianness(BitConverter.SingleToInt32Bits(value));
|
return MemoryMarshal.TryWrite(destination, ref value);
|
||||||
return MemoryMarshal.TryWrite(destination, ref tmp);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ public static class SingleExtensions
|
|||||||
#if NET5_0_OR_GREATER
|
#if NET5_0_OR_GREATER
|
||||||
return BinaryPrimitives.TryWriteSingleLittleEndian(destination, value);
|
return BinaryPrimitives.TryWriteSingleLittleEndian(destination, value);
|
||||||
#else
|
#else
|
||||||
if (!BitConverter.IsLittleEndian)
|
if (BitConverter.IsLittleEndian)
|
||||||
{
|
{
|
||||||
return MemoryMarshal.TryWrite(destination, ref value);
|
return MemoryMarshal.TryWrite(destination, ref value);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user