public void Unsubscribe(IFNodeWatcher watcher,FNode watched) { if (_watchedFNodes.Contains(watched)) { List<IFNodeWatcher> watchers=_watchersByFNode[watched]; watchers.Remove(watcher); if (watchers.Count==0) { _watchersByFNode.Remove(watched); _watchedFNodes.Remove(watched); } } }
public void Unsubscribe(IFNodeWatcher watcher) { int i=_watchedFNodes.Count; while (i-->0) { FNode watched=_watchedFNodes[i]; List<IFNodeWatcher> watchers=_watchersByFNode[watched]; watchers.Remove(watcher); if (watchers.Count==0) { _watchersByFNode.Remove(watched); _watchedFNodes.RemoveAt(i); } } }
public void Subscribe(IFNodeWatcher watcher,FNode watched) { if (!_watchedFNodes.Contains(watched)) { _watchedFNodes.Add(watched); List<IFNodeWatcher> watchers=new List<IFNodeWatcher>(); watchers.Add(watcher); _watchersByFNode.Add(watched,watchers); } else { _watchersByFNode[watched].Add(watcher); } }