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