// Unity C# reference source // Copyright (c) Unity Technologies. For terms of use, see // https://unity3d.com/legal/licenses/Unity_Reference_Only_License using System; using System.Collections; using System.Collections.Generic; namespace UnityEditor { // Helpers for builtin arrays ... // These are O(n) operations (where List() is used) - the arrays are actually copied (http://msdn.microsoft.com/en-us/library/fkbw11z0.aspx) // but its pretty helpful for now public static class ArrayUtility { //appends ''item'' to the end of ''array'' public static void Add(ref T[] array, T item) { System.Array.Resize(ref array, array.Length + 1); array[array.Length - 1] = item; } //compares two arrays public static bool ArrayEquals(T[] lhs, T[] rhs) { if (lhs == null || rhs == null) return lhs == rhs; if (lhs.Length != rhs.Length) return false; for (int i = 0; i < lhs.Length; i++) { if (!lhs[i].Equals(rhs[i])) return false; } return true; } //compares two arrays public static bool ArrayReferenceEquals(T[] lhs, T[] rhs) { if (lhs == null || rhs == null) return lhs == rhs; if (lhs.Length != rhs.Length) return false; for (int i = 0; i < lhs.Length; i++) { if (!object.ReferenceEquals(lhs[i], rhs[i])) return false; } return true; } //appends items to the end of array public static void AddRange(ref T[] array, T[] items) { int size = array.Length; System.Array.Resize(ref array, array.Length + items.Length); for (int i = 0; i < items.Length; i++) array[size + i] = items[i]; } //inserts item ''item'' at position ''index'' public static void Insert(ref T[] array, int index, T item) { ArrayList a = new ArrayList(); a.AddRange(array); a.Insert(index, item); array = a.ToArray(typeof(T)) as T[]; } //removes ''item'' from ''array'' public static void Remove(ref T[] array, T item) { List newList = new List(array); newList.Remove(item); array = newList.ToArray(); } public static List FindAll(T[] array, Predicate match) { List list = new List(array); return list.FindAll(match); } public static T Find(T[] array, Predicate match) { List list = new List(array); return list.Find(match); } //Find the index of the first element that satisfies the predicate public static int FindIndex(T[] array, Predicate match) { List list = new List(array); return list.FindIndex(match); } //index of first element with value ''value'' public static int IndexOf(T[] array, T value) { List list = new List(array); return list.IndexOf(value); } //index of the last element with value ''value'' public static int LastIndexOf(T[] array, T value) { List list = new List(array); return list.LastIndexOf(value); } //remove element at position ''index'' public static void RemoveAt(ref T[] array, int index) { List list = new List(array); list.RemoveAt(index); array = list.ToArray(); } //determines if the array contains the item public static bool Contains(T[] array, T item) { List list = new List(array); return list.Contains(item); } //Clears the array public static void Clear(ref T[] array) { System.Array.Clear(array, 0, array.Length); System.Array.Resize(ref array, 0); } } }