/// <summary> /// Indicate that the given variable was read. May cause other objects to become dependend on the given variable. /// </summary> public void WasRead(object source) { if (!Enabled) { return; } if (DependentsEvaluating.Count != 0) { var weakDependent = DependentsEvaluating.Peek().Dependency; ReactiveManager.GetNode(source).Add(weakDependent); } }
/// <summary> /// Evaluation of reactive nodes must pass through this method. /// </summary> public T Evaluate <T>(IListener dependent, Func <T> func) { if (!Enabled) { return(func()); } WasRead(dependent); var node = ReactiveManager.GetNode(dependent); var dependentReference = node.GetDependency(dependent); DependentsEvaluating.Push(dependentReference); var result = func(); DependentsEvaluating.Pop(); return(result); }
/// <summary> /// Evaluation of reactive nodes must pass through this method. /// </summary> public T Evaluate <T>(IListener dependent, Func <T> func) { if (!Enabled) { return(func()); } WasRead(dependent); DependentsEvaluating.Push(new Evaluation(dependent)); try { return(func()); } finally { DependentsEvaluating.Pop(); } }