purge method

TreeReferenceMap<K, V> purge()

Remove all invalidKeys. Calls onPurgedEntries if defined.

Implementation

TreeReferenceMap<K, V> purge() {
  _unpurgedCount = 0;

  final onPurgedEntries = this.onPurgedEntries;

  var changed = false;
  var purgedEntries = <K, V>{};

  if (keepPurgedEntries) {
    revalidatePurgedEntries();
    checkPurgedEntriesTimeout();

    var invalidKeys = this.invalidKeys;
    if (invalidKeys.isEmpty) return this;

    final purged = _purged ??= {};

    final now = DateTime.now();

    for (var k in invalidKeys) {
      var val = _map.remove(k);
      _purgedEntriesCount++;
      changed = true;
      if (val != null) {
        purged[k] = (value: val, time: now);
        if (onPurgedEntries != null) {
          purgedEntries[k] = val;
        }
      }
    }

    checkPurgeEntriesLimit();

    var purgedEntriesTimeout = this.purgedEntriesTimeout;
    if (changed &&
        purged.isNotEmpty &&
        purgedEntriesTimeout != null &&
        purgedEntriesTimeout.inMilliseconds > 0) {
      Future.delayed(purgedEntriesTimeout, checkPurgedEntriesTimeout);
    }
  } else {
    for (var k in invalidKeys) {
      var val = _map.remove(k);
      _purgedEntriesCount++;
      changed = true;
      if (val != null && onPurgedEntries != null) {
        purgedEntries[k] = val;
      }
    }
  }

  if (changed) {
    _expireCache();
    if (onPurgedEntries != null) {
      onPurgedEntries(purgedEntries);
    }
  }

  return this;
}