/// <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)); }
/// <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; }
/// <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; }