/// <summary> /// Creates a new list with the specified initial capacity and type of memory allocation. /// </summary> /// <param name="sizeOf">Size of element.</param> /// <param name="alignOf">Alignment of element.</param> /// <param name="initialCapacity">The initial capacity of the list. If the list grows larger than its capacity, /// the internal array is copied to a new, larger array.</param> /// <param name="allocator">A member of the /// [Unity.Collections.Allocator](https://docs.unity3d.com/ScriptReference/Unity.Collections.Allocator.html) enumeration.</param> /// <param name="options">Memory should be cleared on allocation or left uninitialized.</param> public static UnsafeList *Create(int sizeOf, int alignOf, int initialCapacity, Allocator allocator, NativeArrayOptions options = NativeArrayOptions.UninitializedMemory) { UnsafeList *listData = (UnsafeList *)UnsafeUtility.Malloc(UnsafeUtility.SizeOf <UnsafeList>(), UnsafeUtility.AlignOf <UnsafeList>(), allocator); UnsafeUtility.MemClear(listData, UnsafeUtility.SizeOf <UnsafeList>()); listData->Allocator = allocator; if (initialCapacity != 0) { listData->SetCapacity(sizeOf, alignOf, initialCapacity); } if (options == NativeArrayOptions.ClearMemory && listData->Ptr != null) { UnsafeUtility.MemClear(listData->Ptr, listData->Capacity * sizeOf); } return(listData); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="count"></param> /// <returns></returns> public void *Allocate <T>(int count = 1) where T : struct { return(Allocate(UnsafeUtility.SizeOf <T>() * count, UnsafeUtility.AlignOf <T>())); }
public void SetCapacity <T>(int targetCapacity, Allocator allocator = Allocator.Persistent) where T : struct { SetCapacity(UnsafeUtility.SizeOf <T>(), UnsafeUtility.AlignOf <T>(), targetCapacity, allocator); }