/// <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);
            }
        }
Beispiel #2
0
        /// <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();
            }
        }