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);
 }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
 public AiNativeList(int initialCapacity)
 {
     m_ListData = UnsafeListData.Create(UnsafeCollectionUtility.SizeOf <T>(), initialCapacity);
 }
Пример #7
0
 public AiNativeList(UnsafeListData *m_ListData)
 {
     this.m_ListData = m_ListData;
 }