DualWeakMap<K extends Object, V extends Object> class

A Map with both keys and values weakly referenced.

Unlike Expando, this is a complete Map implementation, supporting the full Map API, including iteration, removal, and entry views.

Keys are matched by identity (identical) rather than ==. Each entry is therefore associated with a specific object instance.

Entries are automatically removed when either the key or the value is garbage-collected, keeping the map consistent without preventing GC.

This map also provides a lightweight swapped view via swapped, allowing values to be accessed as keys and keys as values without copying data.

Inheritance

Constructors

DualWeakMap({bool autoPurge = true, int autoPurgeThreshold = defaultAutoPurgeThreshold, OnPurgedValues<V>? onPurgedValues})
DualWeakMap.configured({bool autoPurge = true, int autoPurgeThreshold = WeakKeyMap.defaultAutoPurgeThreshold, OnPurgedValues<V>? onPurgedValues, LazyWeakReferenceManager<K>? keyLazyRefManager, LazyWeakReferenceManager<V>? valueLazyRefManager})
factory

Properties

autoPurgeThreshold → int
Number of operations tolerated before auto-purge is triggered.
no setterinherited
entries → Iterable<MapEntry<K, V>>
The map entries of this Map.
no setterinherited
entriesSwapped → Iterable<MapEntry<V, K>>
Iterable of entries with key and value swapped. See DualWeakMap.swapped SwappedDualWeakMap
no setterinherited
hashCode → int
The hash code for this object.
no setterinherited
isAutoPurgeEnabled → bool
Whether auto-purge is enabled.
no setterinherited
isEmpty → bool
Whether there is no key/value pair in the map.
no setterinherited
isNotEmpty → bool
Whether there is at least one key/value pair in the map.
no setterinherited
keys → Iterable<K>
The keys of this Map.
no setterinherited
length → int
The number of key/value pairs in the map.
no setterinherited
onPurgedValues → OnPurgedValues<V>?
Optional callback invoked with values removed during purge.
finalinherited
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
swapped → SwappedDualWeakMap<V, K>
Returns a view with keys and values swapped.
no setter
values → Iterable<V>
The values of this Map.
no setterinherited

Methods

addAll(Map<K, V> other) → void
Adds all key/value pairs of other to this map.
inherited
addEntries(Iterable<MapEntry<K, V>> newEntries) → void
Adds all key/value pairs of newEntries to this map.
inherited
autoPurge() → bool
Runs purge automatically if the threshold is exceeded.
inherited
cast<RK, RV>() → Map<RK, RV>
Provides a view of this map as having RK keys and RV instances, if necessary.
inherited
clear() → void
Removes all entries from the map.
override
containsKey(Object? key) → bool
Whether this map contains the given key.
inherited
containsKeyNoPurge(Object? key) → bool
Returns true if key has an associated value.
inherited
containsValue(Object? value) → bool
Whether this map contains the given value.
override
containsValueNoPurge(Object? value) → bool
Returns true if any entry currently maps to value.
override
forEach(void action(K key, V value)) → void
Applies action to each key/value pair of the map.
inherited
get(Object? key) → V?
Returns the value associated with key, or null if absent or collected.
inherited
getEntry(Object? key) → MapEntry<K, V>?
Returns the MapEntry for key, or null if not found or invalid.
inherited
getKeyFromValue(Object? value) → K?
Returns the key associated with a given value, if still alive.
getNoPurge(Object? key) → V?
Returns the value associated with key, or null if absent or collected. Same as get, but does NOT purge entries with collected key or value.
inherited
isAutoPurgeRequired() → bool
Returns true if auto-purge should be triggered.
inherited
iterate(void action(K key, V value)) → void
Iterates over live entries only.
inherited
map<K2, V2>(MapEntry<K2, V2> transform(K key, V value)) → Map<K2, V2>
Returns a new map where all entries of this map are transformed by the given convert function.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
purge() → WeakKeyMap<K, V>
Removes all entries whose keys were garbage-collected.
inherited
put(K key, V value) → void
Inserts or replaces a key-value pair.
inherited
putIfAbsent(K key, V ifAbsent()) → V
Look up the value of key, or add a new entry if it isn't there.
inherited
putValueIfAbsent(K key, V value) → bool
Inserts value for key only if no entry for key already exists.
inherited
remove(Object? key) → V?
Removes key and its associated value, if present, from the map.
inherited
removeWhere(bool test(K key, V value)) → void
Removes all entries of this map that satisfy the given test.
inherited
removeWhereKey(bool test(K key)) → void
inherited
toString() → String
A string representation of this object.
inherited
update(K key, V update(V value), {V ifAbsent()?}) → V
Updates the value for the provided key.
inherited
updateAll(V update(K key, V value)) → void
Updates all values.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited
operator [](Object? key) → V?
The value for the given key, or null if key is not in the map.
inherited
operator []=(K key, V value) → void
Associates the key with the given value.
inherited