Пример #1
0
        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]);
            }
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        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;
            }
        }