public NativeBinaryHeap(int initialCapacity, Allocator allocator) { // Insist on a minimum capacity initialCapacity = ceilpow2(initialCapacity); initialCapacity = max(initialCapacity, 4); var sizeOf = SizeOf <T>(); var totalSize = sizeOf * (long)initialCapacity; #if ENABLE_UNITY_COLLECTIONS_CHECKS if (allocator <= Allocator.None) { throw new ArgumentException( "Allocator must be Temp, TempJob or Persistent", nameof(allocator)); } if (totalSize > int.MaxValue) { throw new ArgumentOutOfRangeException(nameof(initialCapacity), $"Capacity * sizeof(T) cannot exceed {int.MaxValue} bytes"); } DisposeSentinel.Create(out this.safety, out this.disposeSentinel, 0, allocator); #endif var alignOf = AlignOf <T>(); this.binaryHeapData = UnsafeBinaryHeap.Create(sizeOf, alignOf, initialCapacity, allocator); }
public static void Destroy(UnsafeBinaryHeap *binaryHeapData) { #if ENABLE_UNITY_COLLECTIONS_CHECKS if (binaryHeapData == null) { throw new Exception("UnsafeBinaryHeap has yet to be created or has been destroyed!"); } #endif var allocator = binaryHeapData->Allocator; binaryHeapData->Dispose(); Free(binaryHeapData, allocator); }
public static UnsafeBinaryHeap *Create(int sizeOf, int alignOf, int initialCapacity, Allocator allocator) { var binaryHeapDataSize = SizeOf <UnsafeBinaryHeap>(); UnsafeBinaryHeap *binaryHeapData = (UnsafeBinaryHeap *)Malloc(binaryHeapDataSize, AlignOf <UnsafeBinaryHeap>(), allocator); MemClear(binaryHeapData, binaryHeapDataSize); binaryHeapData->Allocator = allocator; if (initialCapacity != 0) { binaryHeapData->SetCapacity(sizeOf, alignOf, initialCapacity); } return(binaryHeapData); }
void Deallocate() { UnsafeBinaryHeap.Destroy(this.binaryHeapData); this.binaryHeapData = null; }