Spec-Zone.ru › Dart 1

dart:collection

Метод forEachEntry

void forEachEntry(void action(DoubleLinkedQueueEntry<E> element))

Вызывает action для каждого элемента этой двусвязной очереди.

Каждый элемент очереди имеет связанный с ним объект DoubleLinkedQueueEntry. Этот метод итерирует объекты элементов от первого к последнему и вызывает action с каждым объектом поочерёдно.

К объектам элементов также можно получить доступ с помощью firstEntry и lastEntry, и итерировать их с помощью DoubleLinkedQueueEntry.nextEntry() и DoubleLinkedQueueEntry.previousEntry().

Функция action может использовать методы объекта DoubleLinkedQueueEntry, чтобы удалить элемент или вставить элементы перед или после него. Если текущий элемент удаляется, итерация продолжается с элементом, который следовал за текущим элементом, когда action был вызван. Любые элементы, вставленные после текущего элемента до его удаления, не будут посещены во время итерации.

Исходный код

void forEachEntry(void action(DoubleLinkedQueueEntry<E> element)) {
  _DoubleLinkedQueueEntry<E> entry = _sentinel._nextLink;
  while (!identical(entry, _sentinel)) {
    _DoubleLinkedQueueElement<E> element = entry;
    _DoubleLinkedQueueEntry<E> next = element._nextLink;
    // Remember both entry and entry._nextLink.
    // If someone calls `element.remove()` we continue from `next`.
    // Otherwise we use the value of entry._nextLink which may have been
    // updated.
    action(element);
    if (identical(this, entry._queue)) {
      next = entry._nextLink;
    } else if (!identical(this, next._queue)) {
      throw new ConcurrentModificationError(this);
    }
    entry = next;
  }
}

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-collection/DoubleLinkedQueue/forEachEntry.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API