Editor/HumanoidRetargeter/Embedded/ZstdSharp/Unsafe/Mem.cs
#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
using System;
using System.Buffers.Binary;
using System.Runtime.CompilerServices;
using BclUnsafe = System.Runtime.CompilerServices.Unsafe;
// ReSharper disable InconsistentNaming
// ReSharper disable IdentifierTypo
namespace HumanoidRetargeterZstd.Unsafe
{
public static unsafe partial class Methods
{
/*-**************************************************************
* Memory I/O API
*****************************************************************/
/*=== Static platform detection ===*/
private static bool MEM_32bits
{
get => sizeof(nint) == 4;
}
private static bool MEM_64bits
{
get => sizeof(nint) == 8;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static uint MEM_read32(void* memPtr) => BclUnsafe.ReadUnaligned<uint>(memPtr);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static ulong MEM_read64(void* memPtr) => BclUnsafe.ReadUnaligned<ulong>(memPtr);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void MEM_write16(void* memPtr, ushort value) => BclUnsafe.WriteUnaligned(memPtr, value);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void MEM_write64(void* memPtr, ulong value) => BclUnsafe.WriteUnaligned(memPtr, value);
/*=== Little endian r/w ===*/
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static ushort MEM_readLE16(void* memPtr)
{
var val = BclUnsafe.ReadUnaligned<ushort>(memPtr);
if (!BitConverter.IsLittleEndian)
{
val = BinaryPrimitives.ReverseEndianness(val);
}
return val;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static uint MEM_readLE24(void* memPtr) =>
(uint)(MEM_readLE16(memPtr) + (((byte*)memPtr)[2] << 16));
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static uint MEM_readLE32(void* memPtr)
{
var val = BclUnsafe.ReadUnaligned<uint>(memPtr);
if (!BitConverter.IsLittleEndian)
{
val = BinaryPrimitives.ReverseEndianness(val);
}
return val;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void MEM_writeLE32(void* memPtr, uint val32)
{
if (!BitConverter.IsLittleEndian)
{
val32 = BinaryPrimitives.ReverseEndianness(val32);
}
BclUnsafe.WriteUnaligned(memPtr, val32);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static ulong MEM_readLE64(void* memPtr)
{
var val = BclUnsafe.ReadUnaligned<ulong>(memPtr);
if (!BitConverter.IsLittleEndian)
{
val = BinaryPrimitives.ReverseEndianness(val);
}
return val;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static nuint MEM_readLEST(void* memPtr)
{
var val = BclUnsafe.ReadUnaligned<nuint>(memPtr);
if (!BitConverter.IsLittleEndian)
{
val = BinaryPrimitives.ReverseEndianness(val);
}
return val;
}
}
}