unlink function
Removes link from the dependency graph.
Returns the next dependency link for sub. When sub is omitted, this uses
the subscriber stored on link.
Implementation
@pragma("vm:prefer-inline")
@pragma("wasm:prefer-inline")
@pragma("dart2js:prefer-inline")
Link? unlink(Link link, [ReactiveNode? sub]) {
final actualSub = sub ?? link.sub;
final dep = link.dep;
assert(() {
JoltDevTools.notifyLinkUpdate('unlink', dep, actualSub);
return true;
}());
final Link(:prevDep, :nextDep, :nextSub, :prevSub) = link;
if (nextDep != null) {
nextDep.prevDep = prevDep;
} else {
actualSub.depsTail = prevDep;
}
if (prevDep != null) {
prevDep.nextDep = nextDep;
} else {
actualSub.deps = nextDep;
}
if (nextSub != null) {
nextSub.prevSub = prevSub;
} else {
dep.subsTail = prevSub;
}
if (prevSub != null) {
prevSub.nextSub = nextSub;
} else if ((dep.subs = nextSub) == null) {
dep.unwatched();
}
return nextDep;
}