using System; using System.Runtime.InteropServices; namespace Ryujinx.Common.Memory { [StructLayout(LayoutKind.Sequential, Size = Size, Pack = 1)] public struct ByteArray128 : IArray { private const int Size = 128; byte _element; public int Length => Size; public ref byte this[int index] => ref AsSpan()[index]; public Span AsSpan() => MemoryMarshal.CreateSpan(ref _element, Size); } [StructLayout(LayoutKind.Sequential, Size = Size, Pack = 1)] public struct ByteArray256 : IArray { private const int Size = 256; byte _element; public int Length => Size; public ref byte this[int index] => ref AsSpan()[index]; public Span AsSpan() => MemoryMarshal.CreateSpan(ref _element, Size); } [StructLayout(LayoutKind.Sequential, Size = Size, Pack = 1)] public struct ByteArray512 : IArray { private const int Size = 512; byte _element; public int Length => Size; public ref byte this[int index] => ref AsSpan()[index]; public Span AsSpan() => MemoryMarshal.CreateSpan(ref _element, Size); } [StructLayout(LayoutKind.Sequential, Size = Size, Pack = 1)] public struct ByteArray1024 : IArray { private const int Size = 1024; byte _element; public int Length => Size; public ref byte this[int index] => ref AsSpan()[index]; public Span AsSpan() => MemoryMarshal.CreateSpan(ref _element, Size); } [StructLayout(LayoutKind.Sequential, Size = Size, Pack = 1)] public struct ByteArray2048 : IArray { private const int Size = 2048; byte _element; public int Length => Size; public ref byte this[int index] => ref AsSpan()[index]; public Span AsSpan() => MemoryMarshal.CreateSpan(ref _element, Size); } [StructLayout(LayoutKind.Sequential, Size = Size, Pack = 1)] public struct ByteArray4096 : IArray { private const int Size = 4096; byte _element; public int Length => Size; public ref byte this[int index] => ref AsSpan()[index]; public Span AsSpan() => MemoryMarshal.CreateSpan(ref _element, Size); } }