diff options
Diffstat (limited to 'Ryujinx.Common/Extensions/BinaryReaderExtensions.cs')
-rw-r--r-- | Ryujinx.Common/Extensions/BinaryReaderExtensions.cs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs b/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs new file mode 100644 index 00000000..49af946f --- /dev/null +++ b/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs @@ -0,0 +1,37 @@ +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 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); + } + } +} |