-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArrayUtility.cs
133 lines (113 loc) · 3.45 KB
/
ArrayUtility.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.Collections.Generic;
namespace Minerva.Module
{
/// <summary>
/// Array utility same as <see cref="UnityEditor.ArrayUtility"/>
/// </summary>
public static class ArrayUtility
{
public static void Add<T>(ref T[] array, T item)
{
Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = item;
}
public static bool ArrayEquals<T>(this 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;
}
public static bool ArrayReferenceEquals<T>(this 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)lhs[i] != (object)rhs[i])
{
return false;
}
}
return true;
}
public static void AddRange<T>(ref T[] array, T[] items)
{
int num = array.Length;
Array.Resize(ref array, array.Length + items.Length);
for (int i = 0; i < items.Length; i++)
{
array[num + i] = items[i];
}
}
public static void Insert<T>(ref T[] array, int index, T item)
{
var newArray = new T[array.Length + 1];
Array.Copy(array, 0, newArray, 0, index);
newArray[index] = item;
Array.Copy(array, index, newArray, index + 1, array.Length - index);
array = newArray;
}
public static void Remove<T>(ref T[] array, T item)
{
List<T> list = new List<T>(array);
list.Remove(item);
array = list.ToArray();
}
public static T[] FindAll<T>(this T[] array, Predicate<T> match)
{
return Array.FindAll(array, match);
}
public static T Find<T>(this T[] array, Predicate<T> match)
{
return Array.Find(array, match);
}
public static int FindIndex<T>(this T[] array, Predicate<T> match)
{
return Array.FindIndex(array, match);
}
public static int IndexOf<T>(this Array array, T value)
{
return Array.IndexOf(array, value);
}
public static int LastIndexOf<T>(this T[] array, T value)
{
return Array.LastIndexOf(array, value);
}
public static void RemoveAt<T>(ref T[] array, int index)
{
List<T> list = new List<T>(array);
list.RemoveAt(index);
array = list.ToArray();
}
public static bool Contains<T>(T[] array, T item)
{
List<T> list = new List<T>(array);
return list.Contains(item);
}
public static void Clear<T>(ref T[] array)
{
Array.Clear(array, 0, array.Length);
Array.Resize(ref array, 0);
}
}
}