using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace UnityEngine.Rendering.Universal { [StructLayout(LayoutKind.Sequential)] struct Fixed2 where T : unmanaged { public T item1; public T item2; public Fixed2(T item1) : this(item1, item1) { } public Fixed2(T item1, T item2) { this.item1 = item1; this.item2 = item2; } public unsafe T this[int index] { get { CheckRange(index); fixed (T* items = &item1) { return items[index]; } } set { CheckRange(index); fixed (T* items = &item1) { items[index] = value; } } } [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] static void CheckRange(int index) { #if ENABLE_UNITY_COLLECTIONS_CHECKS if (index is < 0 or > 1) { throw new IndexOutOfRangeException($"Index {index} is out of range of 2."); } #endif } } }