From 305f06eb71a7832e6b0081a67015b66ced8a23cd Mon Sep 17 00:00:00 2001 From: Mary Date: Sat, 24 Apr 2021 12:16:01 +0200 Subject: HLE: Fix integer sign inconcistency accross the codebase (#2222) * Make all title id instances unsigned * Replace address and size with ulong instead of signed types Long overdue change. Also change some logics here and there to optimize with the new memory manager. * Address Ac_K's comments * Remove uneeded cast all around * Fixes some others misalignment --- Ryujinx.HLE/Utilities/StructReader.cs | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'Ryujinx.HLE/Utilities/StructReader.cs') diff --git a/Ryujinx.HLE/Utilities/StructReader.cs b/Ryujinx.HLE/Utilities/StructReader.cs index 3bde1c77..81e758a8 100644 --- a/Ryujinx.HLE/Utilities/StructReader.cs +++ b/Ryujinx.HLE/Utilities/StructReader.cs @@ -1,5 +1,6 @@ using Ryujinx.Cpu; using Ryujinx.Memory; +using System; using System.Runtime.InteropServices; namespace Ryujinx.HLE.Utilities @@ -8,39 +9,30 @@ namespace Ryujinx.HLE.Utilities { private IVirtualMemoryManager _memory; - public long Position { get; private set; } + public ulong Position { get; private set; } - public StructReader(IVirtualMemoryManager memory, long position) + public StructReader(IVirtualMemoryManager memory, ulong position) { _memory = memory; Position = position; } - public T Read() where T : struct + public T Read() where T : unmanaged { T value = MemoryHelper.Read(_memory, Position); - Position += Marshal.SizeOf(); + Position += (uint)Marshal.SizeOf(); return value; } - public T[] Read(int size) where T : struct + public ReadOnlySpan Read(int size) where T : unmanaged { - int structSize = Marshal.SizeOf(); + ReadOnlySpan data = _memory.GetSpan(Position, size); - int count = size / structSize; + Position += (uint)size; - T[] output = new T[count]; - - for (int index = 0; index < count; index++) - { - output[index] = MemoryHelper.Read(_memory, Position); - - Position += structSize; - } - - return output; + return MemoryMarshal.Cast(data); } } } -- cgit v1.2.3