iterate method

void iterate(
  1. void action(
    1. K,
    2. V
    )
)

Iterates over live entries only.

Implementation

void iterate(void Function(K, V) action) {
  List<_Entry<K, V>>? del;

  for (var k in _map.keys) {
    var target = k.target;
    if (target == null) {
      del ??= <_Entry<K, V>>[];
      del.add(k);
    } else {
      var payload = k.payload;
      if (payload != null) {
        action(target, payload);
      } else {
        del ??= <_Entry<K, V>>[];
        del.add(k);
      }
    }
  }

  if (del != null) {
    for (var e in del) {
      _map.remove(e);
      if (e is _EntryRef<K, V>) {
        _onRemoveEntry(e);
      }
    }
    _unpurgedCount = 0;
  }
}