using System; using System.IO; using System.Runtime.InteropServices; namespace Ryujinx.Common { public static class BinaryReaderExtensions { public unsafe static T ReadStruct(this BinaryReader reader) where T : struct { int size = Marshal.SizeOf(); byte[] data = reader.ReadBytes(size); fixed (byte* ptr = data) { return Marshal.PtrToStructure((IntPtr)ptr); } } public unsafe static T[] ReadStructArray(this BinaryReader reader, int count) where T : struct { int size = Marshal.SizeOf(); T[] result = new T[count]; for (int i = 0; i < count; i++) { byte[] data = reader.ReadBytes(size); fixed (byte* ptr = data) { result[i] = Marshal.PtrToStructure((IntPtr)ptr); } } return result; } public unsafe static void WriteStruct(this BinaryWriter writer, T value) where T : struct { long size = Marshal.SizeOf(); byte[] data = new byte[size]; fixed (byte* ptr = data) { Marshal.StructureToPtr(value, (IntPtr)ptr, false); } writer.Write(data); } } }