public void Add(SurfaceBoxRenderer addMe, bool alwaysOnTop) { SurfaceBoxRenderer[] startList = alwaysOnTop ? this.topList : this.list; SurfaceBoxRenderer[] listPlusOne = new SurfaceBoxRenderer[startList.Length + 1]; for (int i = 0; i < startList.Length; ++i) { listPlusOne[i] = startList[i]; } listPlusOne[listPlusOne.Length - 1] = addMe; if (alwaysOnTop) { this.topList = listPlusOne; } else { this.list = listPlusOne; } Invalidate(); }
public void Remove(SurfaceBoxRenderer removeMe) { if (this.list.Length == 0 && this.topList.Length == 0) { throw new InvalidOperationException("zero items left, can't remove anything"); } else { bool found = false; if (this.list.Length > 0) { SurfaceBoxRenderer[] listSubOne = new SurfaceBoxRenderer[this.list.Length - 1]; bool foundHere = false; int dstIndex = 0; for (int i = 0; i < this.list.Length; ++i) { if (this.list[i] == removeMe) { if (foundHere) { throw new ArgumentException("removeMe appeared multiple times in the list"); } else { foundHere = true; } } else { if (dstIndex == this.list.Length - 1) { // was not found } else { listSubOne[dstIndex] = this.list[i]; ++dstIndex; } } } if (foundHere) { this.list = listSubOne; found = true; } } if (this.topList.Length > 0) { SurfaceBoxRenderer[] topListSubOne = new SurfaceBoxRenderer[this.topList.Length - 1]; int topDstIndex = 0; bool foundHere = false; for (int i = 0; i < this.topList.Length; ++i) { if (this.topList[i] == removeMe) { if (found || foundHere) { throw new ArgumentException("removeMe appeared multiple times in the list"); } else { foundHere = true; } } else { if (topDstIndex == this.topList.Length - 1) { // was not found } else { topListSubOne[topDstIndex] = this.topList[i]; ++topDstIndex; } } } if (foundHere) { this.topList = topListSubOne; found = true; } } if (!found) { throw new ArgumentException("removeMe was not found", "removeMe"); } Invalidate(); } }