using Ryujinx.Cpu; using Ryujinx.Memory; using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.Utilities { class StructReader { private IVirtualMemoryManager _memory; public ulong Position { get; private set; } public StructReader(IVirtualMemoryManager memory, ulong position) { _memory = memory; Position = position; } public T Read() where T : unmanaged { T value = MemoryHelper.Read(_memory, Position); Position += (uint)Marshal.SizeOf(); return value; } public ReadOnlySpan Read(int size) where T : unmanaged { ReadOnlySpan data = _memory.GetSpan(Position, size); Position += (uint)size; return MemoryMarshal.Cast(data); } } }