Skip to content

Commit cd9b896

Browse files
committed
Some work has changed: Don’t Reinvent the Wheel
1 parent de77956 commit cd9b896

1 file changed

Lines changed: 60 additions & 138 deletions

File tree

Scripts/UdonArrayPlus.cs

Lines changed: 60 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
using VRC.SDKBase;
66
using VRC.Udon;
77

8+
// Some work has a legacy of compatibility with UdonSharp 0.x version, and then I referred to some of Varneon's codes in the upgrade.
9+
// Varneon's VUdon-ArrayExtensions license: MIT License
10+
// Reference code: https://github.com/Varneon/VUdon-ArrayExtensions/blob/main/Packages/com.varneon.vudon.array-extensions/Runtime/UdonArrayExtensions.cs
11+
812
namespace UdonLab
913
{
1014
public class UdonArrayPlus : UdonSharpBehaviour
@@ -13,65 +17,65 @@ public static T[] Add<T>(T[] _array, T _value, bool duplicates = true)
1317
{
1418
if (!duplicates)
1519
{
16-
int _index = Index(_array, _value);
17-
if (_index != -1)
20+
if (IndexOf(_array, _value) != -1)
1821
return _array;
1922
}
20-
T[] _newArray = new T[_array.Length + 1];
21-
Array.Copy(_array, _newArray, _array.Length);
22-
_newArray[_array.Length] = _value;
23+
var length = _array.Length;
24+
var _newArray = new T[length + 1];
25+
Array.Copy(_array, _newArray, length);
26+
_newArray.SetValue(_value, length);
2327
return _newArray;
2428
}
25-
public static T[] AddIndex<T>(T[] _array, T _value, int index, bool duplicates = true)
29+
public static T[] Insert<T>(T[] array, int index, T item, bool duplicates = true)
2630
{
2731
if (!duplicates)
2832
{
29-
int _index = Index(_array, _value);
30-
if (_index != -1)
31-
return _array;
33+
if (IndexOf(array, item) != -1)
34+
return array;
3235
}
33-
if (index < 0 || index > _array.Length)
36+
var length = array.Length;
37+
38+
index = Mathf.Clamp(index, 0, length);
39+
40+
var newArray = new T[length + 1];
41+
42+
newArray.SetValue(item, index);
43+
44+
if (index == 0)
3445
{
35-
return _array;
46+
Array.Copy(array, 0, newArray, 1, length);
3647
}
37-
else if (index == _array.Length)
48+
else if (index == length)
3849
{
39-
return Add(_array, _value);
50+
Array.Copy(array, 0, newArray, 0, length);
4051
}
4152
else
4253
{
43-
T[] _newArray = new T[_array.Length + 1];
44-
for (int i = 0; i < index; i++)
45-
{
46-
_newArray[i] = _array[i];
47-
}
48-
_newArray[index] = _value;
49-
for (int i = index + 1; i < _array.Length + 1; i++)
50-
{
51-
_newArray[i] = _array[i - 1];
52-
}
53-
return _newArray;
54+
Array.Copy(array, 0, newArray, 0, index);
55+
Array.Copy(array, index, newArray, index + 1, length - index);
5456
}
57+
58+
return newArray;
5559
}
56-
public static int Find<T>(T[] _array, T _value)
60+
public static bool Contains<T>(T[] array, T item)
5761
{
58-
return Index(_array, _value);
62+
return IndexOf(array, item) >= 0;
5963
}
6064
public static int[] FindAll<T>(T[] _array, T _value)
6165
{
62-
int[] _index = new int[0];
66+
var _indexs = new int[0];
6367
for (int i = 0; i < _array.Length; i++)
6468
{
6569
if (_array[i].Equals(_value))
6670
{
67-
_index = Add(_index, i);
71+
_indexs = Add(_indexs, i);
6872
}
6973
}
70-
return _index;
74+
return _indexs;
7175
}
7276
public static T[] FindAllValue<T>(T[] _array, T _value)
7377
{
74-
T[] _newArray = new T[0];
78+
var _newArray = new T[0];
7579
for (int i = 0; i < _array.Length; i++)
7680
{
7781
if (_array[i].Equals(_value))
@@ -81,36 +85,42 @@ public static T[] FindAllValue<T>(T[] _array, T _value)
8185
}
8286
return _newArray;
8387
}
84-
public static int Index<T>(T[] _array, T _value)
88+
public static int IndexOf<T>(T[] _array, T _value)
8589
{
86-
for (int i = 0; i < _array.Length; i++)
87-
{
88-
if (_array[i].Equals(_value))
89-
return i;
90-
}
91-
return -1;
90+
return Array.IndexOf(_array, _value);
9291
}
93-
public static T[] RemoveIndex<T>(T[] _array, int index)
92+
public static T[] RemoveAt<T>(T[] array, int index)
9493
{
95-
if (index < 0 || index >= _array.Length)
96-
return _array;
97-
T[] _newArray = new T[_array.Length - 1];
98-
for (int i = 0; i < index; i++)
94+
int length = array.Length;
95+
96+
if(index >= length || index < 0) { return array; }
97+
98+
int maxIndex = length - 1;
99+
100+
T[] newArray = new T[maxIndex];
101+
102+
if (index == 0)
99103
{
100-
_newArray[i] = _array[i];
104+
Array.Copy(array, 1, newArray, 0, maxIndex);
101105
}
102-
for (int i = index; i < _array.Length - 1; i++)
106+
else if(index == maxIndex)
103107
{
104-
_newArray[i] = _array[i + 1];
108+
Array.Copy(array, 0, newArray, 0, maxIndex);
105109
}
106-
return _newArray;
110+
else
111+
{
112+
Array.Copy(array, 0, newArray, 0, index);
113+
Array.Copy(array, index + 1, newArray, index, maxIndex - index);
114+
}
115+
116+
return newArray;
107117
}
108118
public static T[] Remove<T>(T[] _array, T _value)
109119
{
110-
int index = Index(_array, _value);
120+
var index = IndexOf(_array, _value);
111121
if (index == -1)
112122
return _array;
113-
return RemoveIndex(_array, index);
123+
return RemoveAt(_array, index);
114124
}
115125
// String
116126
public static string[] StringsFindLikeAll(string[] _array, string _value)
@@ -138,94 +148,6 @@ public static VRCUrl[] VRCUrlsFindLikeAll(VRCUrl[] _array, string _value)
138148
}
139149
return _newArray;
140150
}
141-
public static int VRCUrlsFind(VRCUrl[] _array, VRCUrl _value)
142-
{
143-
return VRCUrlsIndex(_array, _value);
144-
}
145-
public static int[] VRCUrlsFindAll(VRCUrl[] _array, VRCUrl _value)
146-
{
147-
int[] _index = new int[0];
148-
for (int i = 0; i < _array.Length; i++)
149-
{
150-
if (_array[i].ToString() == _value.ToString())
151-
{
152-
_index = Add(_index, i);
153-
}
154-
}
155-
return _index;
156-
}
157-
public static VRCUrl[] VRCUrlsFindAllValue(VRCUrl[] _array, VRCUrl _value)
158-
{
159-
VRCUrl[] _newArray = new VRCUrl[0];
160-
for (int i = 0; i < _array.Length; i++)
161-
{
162-
if (_array[i].ToString() == _value.ToString())
163-
{
164-
_newArray = VRCUrlsAdd(_newArray, _array[i]);
165-
}
166-
}
167-
return _newArray;
168-
}
169-
public static int VRCUrlsIndex(VRCUrl[] _array, VRCUrl _value)
170-
{
171-
for (int i = 0; i < _array.Length; i++)
172-
{
173-
if (_array[i].ToString() == _value.ToString())
174-
return i;
175-
}
176-
return -1;
177-
}
178-
public static VRCUrl[] VRCUrlsAdd(VRCUrl[] _array, VRCUrl _value, bool duplicates = true)
179-
{
180-
if (!duplicates)
181-
{
182-
int _index = VRCUrlsIndex(_array, _value);
183-
if (_index != -1)
184-
return _array;
185-
}
186-
VRCUrl[] _newArray = new VRCUrl[_array.Length + 1];
187-
Array.Copy(_array, _newArray, _array.Length);
188-
_newArray[_array.Length] = _value;
189-
return _newArray;
190-
}
191-
public static VRCUrl[] VRCUrlsAddIndex(VRCUrl[] _array, VRCUrl _value, int index, bool duplicates = true)
192-
{
193-
if (!duplicates)
194-
{
195-
int _index = VRCUrlsIndex(_array, _value);
196-
if (_index != -1)
197-
return _array;
198-
}
199-
if (index < 0 || index > _array.Length)
200-
{
201-
return _array;
202-
}
203-
else if (index == _array.Length)
204-
{
205-
return VRCUrlsAdd(_array, _value);
206-
}
207-
else
208-
{
209-
VRCUrl[] _newArray = new VRCUrl[_array.Length + 1];
210-
for (int i = 0; i < index; i++)
211-
{
212-
_newArray[i] = _array[i];
213-
}
214-
_newArray[index] = _value;
215-
for (int i = index + 1; i < _array.Length + 1; i++)
216-
{
217-
_newArray[i] = _array[i - 1];
218-
}
219-
return _newArray;
220-
}
221-
}
222-
public static VRCUrl[] VRCUrlsRemove(VRCUrl[] _array, VRCUrl _value)
223-
{
224-
int index = VRCUrlsIndex(_array, _value);
225-
if (index == -1)
226-
return _array;
227-
return RemoveIndex(_array, index);
228-
}
229151
// Int
230152
public static int[] IntsSort(int[] _array, bool reverse = false)
231153
{
@@ -322,7 +244,7 @@ public static int PlayersIndexName(VRCPlayerApi[] players, string _name)
322244
}
323245
public static VRCPlayerApi[] PlayersAdd(VRCPlayerApi[] players, VRCPlayerApi _player, bool force = false)
324246
{
325-
int index = PlayersIndex(players, _player);
247+
var index = PlayersIndex(players, _player);
326248
if (index != -1 && !force)
327249
return players;
328250
VRCPlayerApi[] newPlayers = new VRCPlayerApi[players.Length + 1];
@@ -360,7 +282,7 @@ public static VRCPlayerApi[] PlayersAddIndex(VRCPlayerApi[] players, VRCPlayerAp
360282
}
361283
public static VRCPlayerApi[] PlayersRemove(VRCPlayerApi[] players, VRCPlayerApi _player)
362284
{
363-
int index = PlayersIndex(players, _player);
285+
var index = PlayersIndex(players, _player);
364286
if (index == -1)
365287
{
366288
return players;

0 commit comments

Comments
 (0)