void Shift(int stackNum) { StackData stack = _stacks[stackNum]; if (stack.Size >= stack.Capacity) { int nextStack = (stackNum + 1) % NumberOfStacks; Shift(nextStack); // make some room stack.Capacity++; } for (int i = (stack.Start + stack.Capacity - 1) % TotalSize; // end of array stack.IsWithinStack(i, TotalSize); i = PreviousElement(i)) { _buffer[i] = _buffer[PreviousElement(i)]; } _buffer[stack.Start] = 0; stack.Start = NextElement(stack.Start); // move start start stack.Pointer = NextElement(stack.Pointer); // move stack pointer stack.Capacity--; // return capacity to original }