#undef DEBUG #if DEBUG #define DEV_MODE #endif using System; using System.Diagnostics; using Unity.Collections.LowLevel.Unsafe; using static DCFApixels.DebugX; namespace DCFApixels.DebugXCore { using IN = System.Runtime.CompilerServices.MethodImplAttribute; [DebuggerDisplay("Count:{Count}")] public readonly ref struct GizmosList { public readonly Array Items; public readonly int Count; public GizmosList(Array items, int count) { Items = items; Count = count; } public static GizmosList ConvertFrom(GizmosList list) { return new GizmosList(list.Items, list.Count); } public GizmosList As() { var items = Items; return new GizmosList(UnsafeUtility.As[]>(ref items), Count); } internal static GizmosList From(GizmoInternal[] items, int count) where T : IGizmo { return new GizmosList(UnsafeUtility.As[], Gizmo[]>(ref items), count); } } [DebuggerDisplay("Count:{Count}")] public readonly ref struct GizmosList { public readonly Gizmo[] Items; public readonly int Count; [IN(LINE)] public GizmosList(Gizmo[] items, int count) { Items = items; Count = count; } [IN(LINE)] public GizmosList(GizmosList list) { Items = (Gizmo[])list.Items; Count = list.Count; } public ref Gizmo this[int index] { [IN(LINE)] get { return ref Items[index]; } } public GizmosList As() { var items = Items; return new GizmosList(UnsafeUtility.As[], Gizmo[]>(ref items), Count); } [IN(LINE)] public Enumerator GetEnumerator() { return new Enumerator(Items, Count); } public struct Enumerator { public readonly Gizmo[] Items; public readonly int Count; private int _index; [IN(LINE)] public Enumerator(Gizmo[] items, int count) { Items = items; Count = count; _index = -1; } public ref Gizmo Current { [IN(LINE)] get => ref Items[_index]; } [IN(LINE)] public bool MoveNext() { return ++_index < Count; } } public static implicit operator GizmosList(GizmosList a) => GizmosList.ConvertFrom(a); public static explicit operator GizmosList(GizmosList a) => new GizmosList(a); } }