Ejemplo n.º 1
0
        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
        }