using System; using System.Runtime.CompilerServices; namespace ImGuiNET { public unsafe struct ImVector { public readonly int Size; public readonly int Capacity; public readonly IntPtr Data; public ref T Ref(int index) { return ref Unsafe.AsRef((byte*)Data + index * Unsafe.SizeOf()); } public IntPtr Address(int index) { return (IntPtr)((byte*)Data + index * Unsafe.SizeOf()); } } public unsafe struct ImVector { public readonly int Size; public readonly int Capacity; public readonly IntPtr Data; public ImVector(ImVector vector) { Size = vector.Size; Capacity = vector.Capacity; Data = vector.Data; } public ImVector(int size, int capacity, IntPtr data) { Size = size; Capacity = capacity; Data = data; } public ref T this[int index] => ref Unsafe.AsRef((byte*)Data + index * Unsafe.SizeOf()); } public unsafe struct ImPtrVector { public readonly int Size; public readonly int Capacity; public readonly IntPtr Data; private readonly int _stride; public ImPtrVector(ImVector vector, int stride) : this(vector.Size, vector.Capacity, vector.Data, stride) { } public ImPtrVector(int size, int capacity, IntPtr data, int stride) { Size = size; Capacity = capacity; Data = data; _stride = stride; } public T this[int index] { get { byte* address = (byte*)Data + index * _stride; T ret = Unsafe.Read(&address); return ret; } } } }