unlink method

ReactiveLink? unlink(
  1. ReactiveLink link,
  2. ReactiveNode sub
)

Removes the edge link from both lists it belongs to. If the dependency side loses its last subscriber, unwatched fires. Returns the next link in sub's dependency list (an iteration convenience).

Remove a aresta link das duas listas às quais pertence. Se o lado da dependência perder seu último subscriber, unwatched dispara. Retorna o próximo link da lista de dependências de sub (conveniência de iteração).

Implementation

ReactiveLink? unlink(final ReactiveLink link, final ReactiveNode sub) {
  final ReactiveNode dep = link.dep;
  final ReactiveLink? prevDep = link.prevDep,
      nextDep = link.nextDep,
      nextSub = link.nextSub,
      prevSub = link.prevSub;
  if (nextDep != null) {
    nextDep.prevDep = prevDep;
  } else {
    sub.depsTail = prevDep;
  }
  if (prevDep != null) {
    prevDep.nextDep = nextDep;
  } else {
    sub.deps = nextDep;
  }
  if (nextSub != null) {
    nextSub.prevSub = prevSub;
  } else {
    dep.subsTail = prevSub;
  }
  if (prevSub != null) {
    prevSub.nextSub = nextSub;
  } else if ((dep.subs = nextSub) == null) {
    unwatched(dep);
  }
  return nextDep;
}