mathe/Library/PackageCache/com.unity.render-pipelines.core@14.0.8/Runtime/Utilities/ArrayExtensions.cs
2024-09-20 20:30:10 +02:00

65 lines
2.2 KiB
C#

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