Exemplo n.º 1
0
        public static void RemoveAt(ref IDrawer[] target, int index, bool disposeOriginalArray, bool disposeRemovedDrawer)         //if needed, could add flag for this
        {
                        #if DEV_MODE && PI_ASSERTATIONS
            UnityEngine.Debug.Assert(index >= 0, StringUtils.ToColorizedString(index));
            UnityEngine.Debug.Assert(index <= target.Length, StringUtils.ToColorizedString(index));
                        #endif

            int oldSize = target.Length;
            int newSize = oldSize - 1;
            var result  = Create(newSize);

            for (int n = oldSize - 1; n > index; n--)
            {
                result[n - 1] = target[n];
                target[n]     = null;
            }

            if (disposeRemovedDrawer)
            {
                var removed = target[index];
                if (removed != null)
                {
                    DrawerPool.Pool(removed);
                }
            }

            for (int n = index - 1; n >= 0; n--)
            {
                result[n] = target[n];
                target[n] = null;
            }

            if (disposeOriginalArray)
            {
                Dispose(ref target, false);
            }

            target = result;
        }