aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Common/Extensions/BinaryReaderExtensions.cs')
-rw-r--r--Ryujinx.Common/Extensions/BinaryReaderExtensions.cs20
1 files changed, 20 insertions, 0 deletions
diff --git a/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs b/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
index 49af946f..05c77fe9 100644
--- a/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
+++ b/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
@@ -19,6 +19,26 @@ namespace Ryujinx.Common
}
}
+ 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
{