RoboticArms/Library/PackageCache/com.unity.splines@d3e1e500c9a0/Runtime/ArrayUtility.cs
2025-11-17 15:16:36 +07:00

63 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
namespace UnityEngine.Splines
{
static class ArrayUtility
{
public static void RemoveAt<T>(ref T[] array, int index)
{
if (index < 0 || index >= array.Length)
throw new IndexOutOfRangeException();
Array.Copy(array, index + 1, array, index, array.Length - index - 1);
Array.Resize(ref array, array.Length - 1);
}
public static void RemoveAt<T>(ref T[] array, IEnumerable<int> indices)
{
List<int> sorted = new List<int>(indices);
sorted.Sort();
SortedRemoveAt(ref array, sorted);
}
public static void SortedRemoveAt<T>(ref T[] array, IList<int> sorted)
{
int indexeSortedCount = sorted.Count;
int len = array.Length;
T[] newArray = new T[len - indexeSortedCount];
int n = 0;
for (int i = 0; i < len; i++)
{
if (n < indexeSortedCount && sorted[n] == i)
{
// handle duplicate indexes
while (n < indexeSortedCount && sorted[n] == i)
n++;
continue;
}
newArray[i - n] = array[i];
}
array = newArray;
}
public static void Remove<T>(ref T[] array, T element)
{
var index = Array.IndexOf(array, element);
if (index >= 0)
RemoveAt(ref array, index);
}
public static void Add<T>(ref T[] array, T element)
{
Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = element;
}
}
}