diff options
Diffstat (limited to 'Ryujinx.HLE/Utilities')
| -rw-r--r-- | Ryujinx.HLE/Utilities/StringUtils.cs | 10 | ||||
| -rw-r--r-- | Ryujinx.HLE/Utilities/StructReader.cs | 26 | ||||
| -rw-r--r-- | Ryujinx.HLE/Utilities/StructWriter.cs | 8 |
3 files changed, 18 insertions, 26 deletions
diff --git a/Ryujinx.HLE/Utilities/StringUtils.cs b/Ryujinx.HLE/Utilities/StringUtils.cs index 4399da21..0259a4fd 100644 --- a/Ryujinx.HLE/Utilities/StringUtils.cs +++ b/Ryujinx.HLE/Utilities/StringUtils.cs @@ -53,14 +53,14 @@ namespace Ryujinx.HLE.Utilities public static string ReadUtf8String(ServiceCtx context, int index = 0) { - long position = context.Request.PtrBuff[index].Position; - long size = context.Request.PtrBuff[index].Size; + ulong position = context.Request.PtrBuff[index].Position; + ulong size = context.Request.PtrBuff[index].Size; using (MemoryStream ms = new MemoryStream()) { while (size-- > 0) { - byte value = context.Memory.Read<byte>((ulong)position++); + byte value = context.Memory.Read<byte>(position++); if (value == 0) { @@ -86,8 +86,8 @@ namespace Ryujinx.HLE.Utilities public static string ReadUtf8StringSend(ServiceCtx context, int index = 0) { - long position = context.Request.SendBuff[index].Position; - long size = context.Request.SendBuff[index].Size; + ulong position = context.Request.SendBuff[index].Position; + ulong size = context.Request.SendBuff[index].Size; using (MemoryStream ms = new MemoryStream()) { 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<T>() where T : struct + public T Read<T>() where T : unmanaged { T value = MemoryHelper.Read<T>(_memory, Position); - Position += Marshal.SizeOf<T>(); + Position += (uint)Marshal.SizeOf<T>(); return value; } - public T[] Read<T>(int size) where T : struct + public ReadOnlySpan<T> Read<T>(int size) where T : unmanaged { - int structSize = Marshal.SizeOf<T>(); + ReadOnlySpan<byte> 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<T>(_memory, Position); - - Position += structSize; - } - - return output; + return MemoryMarshal.Cast<byte, T>(data); } } } diff --git a/Ryujinx.HLE/Utilities/StructWriter.cs b/Ryujinx.HLE/Utilities/StructWriter.cs index 6b1e0838..39644db5 100644 --- a/Ryujinx.HLE/Utilities/StructWriter.cs +++ b/Ryujinx.HLE/Utilities/StructWriter.cs @@ -8,9 +8,9 @@ namespace Ryujinx.HLE.Utilities { private IVirtualMemoryManager _memory; - public long Position { get; private set; } + public ulong Position { get; private set; } - public StructWriter(IVirtualMemoryManager memory, long position) + public StructWriter(IVirtualMemoryManager memory, ulong position) { _memory = memory; Position = position; @@ -20,10 +20,10 @@ namespace Ryujinx.HLE.Utilities { MemoryHelper.Write(_memory, Position, value); - Position += Marshal.SizeOf<T>(); + Position += (ulong)Marshal.SizeOf<T>(); } - public void SkipBytes(long count) + public void SkipBytes(ulong count) { Position += count; } |
