public UnsafeList(int capacity = 10) { if (capacity < 1) { capacity = 1; } data = (UnsafeListData *)UnsafeUtility.Malloc(UnsafeListData.SIZE, 16, Allocator.Persistent); data->structSize = (uint)UnsafeUtility.SizeOf <T>(); data->capacity = capacity; data->length = 0; data->arrayPtr = (ulong)UnsafeUtility.Malloc(data->structSize * data->capacity, 16, Allocator.Persistent); }
public static void Destroy(UnsafeListData *listData) { #if DEBUG || ENABLE_UNITY_COLLECTIONS_CHECKS if (listData == null) { throw new InvalidOperationException("UnsafeListData has yet to be created or has been destroyed!"); } #endif listData->Dispose(); Marshal.FreeHGlobal((IntPtr)listData); listData = null; }
public static UnsafeListData *Create(int sizeOf, int initialCapacity) { UnsafeListData *listData = (UnsafeListData *)Marshal.AllocHGlobal(UnsafeCollectionUtility.SizeOf <UnsafeListData>()); listData->Length = 0; listData->Capacity = 0; if (initialCapacity != 0) { listData->SetCapacity(sizeOf, initialCapacity); } return(listData); }
public static UnsafeListData *CreateFrom <T>(AiNativeArray <T> array) where T : unmanaged { UnsafeListData *listData = Create(UnsafeCollectionUtility.SizeOf <T>(), array.Length); if (listData->Capacity < array.Length) { listData->Dispose(); throw new Exception("Unknown Error"); } listData->Length = array.Length; int bytesToCopy = array.Length * UnsafeCollectionUtility.SizeOf <T>(); Buffer.MemoryCopy(array.GetUnsafePtr(), listData->Ptr, bytesToCopy, bytesToCopy); return(listData); }
public static UnsafeListData *CreateFrom <T>(byte[] array) where T : unmanaged { if (array.Length % UnsafeCollectionUtility.SizeOf <T>() != 0) { throw new ArgumentException("Invalid length for type"); } int size = array.Length / UnsafeCollectionUtility.SizeOf <T>(); UnsafeListData *listData = Create(UnsafeCollectionUtility.SizeOf <T>(), size); listData->Length = size; MemoryCopy.Copy(array, 0, listData->Ptr, 0, array.Length); return(listData); }
public AiNativeList(int initialCapacity) { m_ListData = UnsafeListData.Create(UnsafeCollectionUtility.SizeOf <T>(), initialCapacity); }
public AiNativeList(UnsafeListData *m_ListData) { this.m_ListData = m_ListData; }