public static void Copy <T, TCopy>(ME.ECS.Collections.BufferArray <T> fromArr, ref ME.ECS.Collections.BufferArray <T> arr, TCopy copy) where TCopy : IArrayElementCopy <T> { if (fromArr.arr == null) { if (arr.arr != null) { for (int i = 0; i < arr.Length; ++i) { copy.Recycle(arr.arr[i]); } PoolArray <T> .Recycle(ref arr); } arr = BufferArray <T> .Empty; return; } if (arr.arr == null || fromArr.Length != arr.Length) { if (arr.arr != null) { ArrayUtils.Recycle(ref arr, copy); } arr = PoolArray <T> .Spawn(fromArr.Length); } for (int i = 0; i < fromArr.Length; ++i) { copy.Copy(fromArr.arr[i], ref arr.arr[i]); } }
public static void Copy <T, TCopy>(ListCopyable <T> fromArr, ref ListCopyable <T> arr, TCopy copy) where TCopy : IArrayElementCopy <T> { if (fromArr == null) { if (arr != null) { for (int i = 0; i < arr.Count; ++i) { copy.Recycle(arr[i]); } PoolListCopyable <T> .Recycle(ref arr); } arr = null; return; } if (arr == null || fromArr.Count != arr.Count) { if (arr != null) { ArrayUtils.Recycle(ref arr, copy); } arr = PoolListCopyable <T> .Spawn(fromArr.Count); } var cnt = arr.Count; for (int i = 0; i < fromArr.Count; ++i) { var isDefault = i >= cnt; T item = (isDefault ? default : arr[i]); copy.Copy(fromArr[i], ref item); if (isDefault == true) { arr.Add(item); } else { arr[i] = item; } } }
public static void Copy <T, TCopy>(T[] fromArr, ref T[] arr, TCopy copy) where TCopy : IArrayElementCopy <T> { if (fromArr == null) { if (arr != null) { for (int i = 0; i < arr.Length; ++i) { copy.Recycle(arr[i]); } PoolArray <T> .Recycle(ref arr); } arr = null; return; } if (arr == null || fromArr.Length != arr.Length) { if (arr != null) { ArrayUtils.Recycle(ref arr, copy); } arr = new T[fromArr.Length]; } var cnt = arr.Length; for (int i = 0; i < fromArr.Length; ++i) { var isDefault = i >= cnt; T item = (isDefault ? default : arr[i]); copy.Copy(fromArr[i], ref item); arr[i] = item; } }