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