DoubleLinkedQueue<E> Class
Implementation of a double linked list that box list elements into DoubleLinkedQueueEntry objects.
Implements
Constructors
Code new DoubleLinkedQueue() #
DoubleLinkedQueue() { _sentinel = new _DoubleLinkedQueueEntrySentinel<E>(); }
Code factory DoubleLinkedQueue.from(Iterable<E> other) #
factory DoubleLinkedQueue.from(Iterable<E> other) { Queue<E> list = new DoubleLinkedQueue(); for (final e in other) { list.addLast(e); } return list; }
Methods
Code void addAll(Collection<E> collection) #
void addAll(Collection<E> collection) { for (final e in collection) { add(e); } }
Code void clear() #
void clear() { _sentinel._next = _sentinel; _sentinel._previous = _sentinel; }
Code bool every(bool f(E element)) #
bool every(bool f(E element)) { DoubleLinkedQueueEntry<E> entry = _sentinel._next; while (entry !== _sentinel) { DoubleLinkedQueueEntry<E> nextEntry = entry._next; if (!f(entry._element)) return false; entry = nextEntry; } return true; }
Code Queue<E> filter(bool f(E element)) #
Queue<E> filter(bool f(E element)) { Queue<E> other = new Queue<E>(); DoubleLinkedQueueEntry<E> entry = _sentinel._next; while (entry !== _sentinel) { DoubleLinkedQueueEntry<E> nextEntry = entry._next; if (f(entry._element)) other.addLast(entry._element); entry = nextEntry; } return other; }
Code DoubleLinkedQueueEntry<E> firstEntry() #
DoubleLinkedQueueEntry<E> firstEntry() { return _sentinel.nextEntry(); }
Code void forEach(void f(E element)) #
void forEach(void f(E element)) { DoubleLinkedQueueEntry<E> entry = _sentinel._next; while (entry !== _sentinel) { DoubleLinkedQueueEntry<E> nextEntry = entry._next; f(entry._element); entry = nextEntry; } }
Code void forEachEntry(void f(DoubleLinkedQueueEntry<E> element)) #
void forEachEntry(void f(DoubleLinkedQueueEntry<E> element)) { DoubleLinkedQueueEntry<E> entry = _sentinel._next; while (entry !== _sentinel) { DoubleLinkedQueueEntry<E> nextEntry = entry._next; f(entry); entry = nextEntry; } }
Code _DoubleLinkedQueueIterator<E> iterator() #
_DoubleLinkedQueueIterator<E> iterator() { return new _DoubleLinkedQueueIterator<E>(_sentinel); }
Code DoubleLinkedQueueEntry<E> lastEntry() #
DoubleLinkedQueueEntry<E> lastEntry() { return _sentinel.previousEntry(); }
Code int get length() #
int get length() { int counter = 0; forEach(void _(E element) { counter++; }); return counter; }
Code Queue map(f(E element)) #
Queue map(f(E element)) { Queue other = new Queue(); DoubleLinkedQueueEntry<E> entry = _sentinel._next; while (entry !== _sentinel) { DoubleLinkedQueueEntry<E> nextEntry = entry._next; other.addLast(f(entry._element)); entry = nextEntry; } return other; }