예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
 void Deallocate()
 {
     UnsafeBinaryHeap.Destroy(this.binaryHeapData);
     this.binaryHeapData = null;
 }