Spec-Zone.ru › Dart 2

dart:collection

Метод forEachEntry

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

Вызывает action для каждого объекта записи в этом двусвязном списке.

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

Доступ к объектам записей также можно получить, используя firstEntry и lastEntry, а также итерировать с помощью DoubleLinkedQueueEntry.nextEntry() и DoubleLinkedQueueEntry.previousEntry().

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

Реализация

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

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-collection/DoubleLinkedQueue/forEachEntry.html

Spec-Zone.ru

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