Dart API Referencedart:coreimplDoubleLinkedQueue<E>

DoubleLinkedQueue<E> Class

Implementation of a double linked list that box list elements into DoubleLinkedQueueEntry objects.

Implements

Queue<E>

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 add(E value) #

void add(E value) {
  addLast(value);
}

Code void addAll(Collection<E> collection) #

void addAll(Collection<E> collection) {
  for (final e in collection) {
    add(e);
  }
}

Code void addFirst(E value) #

void addFirst(E value) {
  _sentinel.append(value);
}

Code void addLast(E value) #

void addLast(E value) {
  _sentinel.prepend(value);
}

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 E first() #

E first() {
  return _sentinel._next.element;
}

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 bool isEmpty() #

bool isEmpty() {
  return (_sentinel._next === _sentinel);
}

Code _DoubleLinkedQueueIterator<E> iterator() #

_DoubleLinkedQueueIterator<E> iterator() {
  return new _DoubleLinkedQueueIterator<E>(_sentinel);
}

Code E last() #

E last() {
  return _sentinel._previous.element;
}

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;
}

Code E removeFirst() #

E removeFirst() {
  return _sentinel._next.remove();
}

Code E removeLast() #

E removeLast() {
  return _sentinel._previous.remove();
}

Code bool some(bool f(E element)) #

bool some(bool f(E element)) {
  DoubleLinkedQueueEntry<E> entry = _sentinel._next;
  while (entry !== _sentinel) {
    DoubleLinkedQueueEntry<E> nextEntry = entry._next;
    if (f(entry._element)) return true;
    entry = nextEntry;
  }
  return false;
}

Code String toString() #

String toString() {
  return Collections.collectionToString(this);
}