public DoubleRollingStack(int maxSize) { _head = new DoubleNode <T>(default(T)); _tail = _head; _head.Next = _tail; _tail.Previous = _head; _maxSize = maxSize; }
public int Count() { int counter = 0; DoubleNode <T> node = _head.Next; while (node != null) { counter++; node = node.Next; } return(counter); }
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); }
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); }
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); }