Пример #1
0
        NativeListArray(int initialListCapacity, Allocator allocator, int disposeSentinelStackDepth)
        {
            var totalSize = UnsafeUtility.SizeOf <T>() * (long)initialListCapacity;

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            // Native allocation is only valid for Temp, Job and Persistent.
            if (allocator <= Allocator.None)
            {
                throw new ArgumentException("Allocator must be Temp, TempJob or Persistent", nameof(allocator));
            }
            if (initialListCapacity < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(initialListCapacity), "InitialListCapacity must be >= 0");
            }


            CollectionHelper.CheckIsUnmanaged <T>();

            if (totalSize > int.MaxValue)
            {
                throw new ArgumentOutOfRangeException(nameof(initialListCapacity), $"InitialListCapacity * sizeof(T) cannot exceed {int.MaxValue} bytes");
            }

            DisposeSentinel.Create(out m_Safety, out m_DisposeSentinel, disposeSentinelStackDepth, allocator);
#endif
            m_Array = UnsafeListArray.Create(allocator);
            m_Array->InitialListCapacity = initialListCapacity;

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            AtomicSafetyHandle.SetBumpSecondaryVersionOnScheduleWrite(m_Safety, true);
#endif
        }
Пример #2
0
        public void Dispose()
        {
#if ENABLE_UNITY_COLLECTIONS_CHECKS
            DisposeSentinel.Dispose(ref m_Safety, ref m_DisposeSentinel);
#endif
            UnsafeListArray.Destroy(m_Array);
            m_Array = null;
        }
Пример #3
0
        public static void Destroy(UnsafeListArray *arrayData)
        {
            NullCheck(arrayData);
            var allocator = arrayData->Allocator;

            CheckAllocator(allocator);
            arrayData->Dispose();
            UnsafeUtility.Free(arrayData, allocator);
        }
Пример #4
0
        public static UnsafeListArray *Create(Allocator allocator)
        {
            UnsafeListArray *arrayData = (UnsafeListArray *)UnsafeUtility.Malloc(UnsafeUtility.SizeOf <UnsafeListArray>(), UnsafeUtility.AlignOf <UnsafeListArray>(), allocator);

            UnsafeUtility.MemClear(arrayData, UnsafeUtility.SizeOf <UnsafeListArray>());

            arrayData->Allocator = allocator;
            arrayData->Length    = 0;
            arrayData->Capacity  = 0;

            return(arrayData);
        }
Пример #5
0
        NativeListArray(int initialListCapacity, Allocator allocator, int disposeSentinelStackDepth)
        {
            var totalSize = UnsafeUtility.SizeOf <T>() * (long)initialListCapacity;

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            // Native allocation is only valid for Temp, Job and Persistent.
            CheckAllocator(allocator);
            CheckArgPositive(initialListCapacity);


            //CollectionHelper.CheckIsUnmanaged<T>();
            CheckArgInRange(totalSize, int.MaxValue);

            DisposeSentinel.Create(out m_Safety, out m_DisposeSentinel, disposeSentinelStackDepth, allocator);
#endif
            m_Array = UnsafeListArray.Create(allocator);
            m_Array->InitialListCapacity = initialListCapacity;

#if ENABLE_UNITY_COLLECTIONS_CHECKS
            AtomicSafetyHandle.SetBumpSecondaryVersionOnScheduleWrite(m_Safety, true);
#endif
        }