using System; using Unity.Collections; using UnityEngine.Jobs; namespace UnityEngine.Rendering { /// /// Array utilities functions /// public static class ArrayExtensions { /// /// Resizes a native array. If an empty native array is passed, it will create a new one. /// /// The type of the array /// Target array to resize /// New size of native array to resize public static void ResizeArray(this ref NativeArray array, int capacity) where T : struct { var newArray = new NativeArray(capacity, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); if (array.IsCreated) { NativeArray.Copy(array, newArray, array.Length); array.Dispose(); } array = newArray; } /// /// Resizes a transform access array. /// /// Target array to resize /// New size of transform access array to resize public static void ResizeArray(this ref TransformAccessArray array, int capacity) { var newArray = new TransformAccessArray(capacity); if (array.isCreated) { for (int i = 0; i < array.length; ++i) newArray.Add(array[i]); array.Dispose(); } array = newArray; } /// /// Resizes an array. If a null reference is passed, it will allocate the desired array. /// /// The type of the array /// Target array to resize /// New size of array to resize public static void ResizeArray(ref T[] array, int capacity) { if (array == null) { array = new T[capacity]; return; } Array.Resize(ref array, capacity); } } }