/// <summary>
        /// Handles the array resizing if necessary when an index is accessed.
        /// </summary>
        /// <param name="index">The index being accessed.</param>
        /// <returns>The adjusted index to be used for accessing the backing array.</returns>
        private Index3D HandleArrayResizing(Index3D index)
        {
            int x = index.X;
            int y = index.Y;
            int z = index.Z;

            if (this.IsIndexInCurrentBounds(index))
            {
                x += this.xOrigin;
                y += this.yOrigin;
                z += this.zOrigin;
                return(new Index3D(x, y, z));
            }

            // determine size of new array
            int xOffset, yOffset, zOffset;
            int xNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis3D.X), ref x, ref this.xOrigin, out xOffset);
            int yNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis3D.Y), ref y, ref this.yOrigin, out yOffset);
            int zNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis3D.Z), ref z, ref this.zOrigin, out zOffset);

            // copy old array into new array
            T[,,] newArray = new T[xNewSize, yNewSize, zNewSize];
            foreach (KeyValuePair <Index3D, T> pair in this.array.GetIndexValuePairs())
            {
                newArray[pair.Key.X + xOffset, pair.Key.Y + yOffset, pair.Key.Z + zOffset] = pair.Value;
            }

            this.array = newArray;
            return(new Index3D(x, y, z));
        }
        /// <summary>
        /// Handles the array resizing if necessary when an index is accessed.
        /// </summary>
        /// <param name="index">The index being accessed.</param>
        /// <returns>The adjusted index to be used for accessing the backing array.</returns>
        private Index1D HandleArrayResizing(Index1D index)
        {
            int x = index.X;

            if (this.IsIndexInCurrentBounds(index))
            {
                x += this.xOrigin;
                return(new Index1D(x));
            }

            // determine size of new array
            int xOffset;
            int xNewSize = DynamicArrayUtilities.HandleAxis(
                this.GetCurrentLength(Axis1D.X), ref x, ref this.xOrigin, out xOffset);

            // copy old array into new array
            T[] newArray = new T[xNewSize];
            foreach (var pair in this.array.GetIndexValuePairs())
            {
                newArray[pair.Key.X + xOffset] = pair.Value;
            }

            this.array = newArray;
            return(new Index1D(x));
        }
예제 #3
0
        /// <summary>
        /// Handles the array resizing if necessary when an index is accessed.
        /// </summary>
        /// <param name="index">The index being accessed.</param>
        private void HandleArrayResizing(Index1D index)
        {
            if (this.IsIndexInCurrentBounds(index))
            {
                return;
            }

            // determine size of new array
            int xNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis1D.X), index.X);

            // copy old array into new array
            T[] newArray = new T[xNewSize];

            foreach (KeyValuePair <Index1D, T> entry in this)
            {
                newArray[entry.Key.X] =
                    this.array[entry.Key.X];
            }

            this.array = newArray;
        }
예제 #4
0
        /// <summary>
        /// Handles the array resizing if necessary when an index is accessed.
        /// </summary>
        /// <param name="index">The index being accessed.</param>
        private void HandleArrayResizing(Index4D index)
        {
            if (this.IsIndexInCurrentBounds(index))
            {
                return;
            }

            // determine size of new array
            int xNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis4D.X), index.X);
            int yNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis4D.Y), index.Y);
            int zNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis4D.Z), index.Z);
            int wNewSize = DynamicArrayUtilities.HandleAxis(this.GetCurrentLength(Axis4D.W), index.W);

            // copy old array into new array
            T[,,,] newArray = new T[xNewSize, yNewSize, zNewSize, wNewSize];

            foreach (KeyValuePair <Index4D, T> entry in this)
            {
                newArray[entry.Key.X, entry.Key.Y, entry.Key.Z, entry.Key.W] =
                    this.array[entry.Key.X, entry.Key.Y, entry.Key.Z, entry.Key.W];
            }

            this.array = newArray;
        }