Exemplo n.º 1
0
 public DoubleRollingStack(int maxSize)
 {
     _head          = new DoubleNode <T>(default(T));
     _tail          = _head;
     _head.Next     = _tail;
     _tail.Previous = _head;
     _maxSize       = maxSize;
 }
Exemplo n.º 2
0
        public int Count()
        {
            int            counter = 0;
            DoubleNode <T> node    = _head.Next;

            while (node != null)
            {
                counter++;
                node = node.Next;
            }
            return(counter);
        }
Exemplo n.º 3
0
        public T Pop()
        {
            DoubleNode <T> node = _head.Next;

            // this is shit.
            T value = node != null ? node.Value : default(T);

            if (node != null)
            {
                _size--;
                _head.Next = node.Next;
            }

            return(value);
        }
Exemplo n.º 4
0
        private int trim()
        {
            int            counter = 0;
            DoubleNode <T> node    = _head;

            while (node != null)
            {
                if (counter == _maxSize)
                {
                    node.Next = null;
                    break;
                }
                node = node.Next;
                counter++;
            }
            _size = counter;
            return(counter);
        }
Exemplo n.º 5
0
        public bool Push(T value)
        {
            DoubleNode <T> node = new DoubleNode <T>(value);

            node.Next  = _head.Next;
            _head.Next = node;

            bool trimmed = _size >= MaxSize;

            if (trimmed)
            {
                trim();
            }
            else
            {
                _size++;
            }
            return(trimmed);
        }