You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.9 KiB
75 lines
1.9 KiB
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<T>(int index) |
|
{ |
|
return ref Unsafe.AsRef<T>((byte*)Data + index * Unsafe.SizeOf<T>()); |
|
} |
|
|
|
public IntPtr Address<T>(int index) |
|
{ |
|
return (IntPtr)((byte*)Data + index * Unsafe.SizeOf<T>()); |
|
} |
|
} |
|
|
|
public unsafe struct ImVector<T> |
|
{ |
|
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<T>((byte*)Data + index * Unsafe.SizeOf<T>()); |
|
} |
|
|
|
public unsafe struct ImPtrVector<T> |
|
{ |
|
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<T>(&address); |
|
return ret; |
|
} |
|
} |
|
} |
|
}
|
|
|