diff options
Diffstat (limited to 'Ryujinx.Common/Extensions')
| -rw-r--r-- | Ryujinx.Common/Extensions/BinaryReaderExtensions.cs | 37 | ||||
| -rw-r--r-- | Ryujinx.Common/Extensions/EnumExtensions.cs | 12 |
2 files changed, 49 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); + } + } +} diff --git a/Ryujinx.Common/Extensions/EnumExtensions.cs b/Ryujinx.Common/Extensions/EnumExtensions.cs new file mode 100644 index 00000000..560af882 --- /dev/null +++ b/Ryujinx.Common/Extensions/EnumExtensions.cs @@ -0,0 +1,12 @@ +using System; + +namespace Ryujinx.Common +{ + public static class EnumExtensions + { + public static T[] GetValues<T>() + { + return (T[])Enum.GetValues(typeof(T)); + } + } +} |
