예제 #1
0
        /// <summary>
        /// Завершает цепочку описания функции и вычисляет ее.
        /// </summary>
        /// <typeparam name="TA">Тип аргумента.</typeparam>
        /// <typeparam name="TV">Тип функции.</typeparam>
        /// <param name="previous">Предыдущий элемент цепочки.</param>
        /// <param name="value">Значение по умолчанию.</param>
        /// <param name="argument">Аргумент функции.</param>
        /// <returns>Вычисленное значение.</returns>
        public static TV Otherwise <TA, TV>(this FunctionNode <TA, TV> previous, TV value, TA argument)
        {
            var last = new FunctionNode <TA, TV>(previous, value);

            try
            {
                return(last.ComputeFunction(argument));
            }
            catch    //    handled
            {
                return(value);
            }
        }
예제 #2
0
        internal FunctionNode(FunctionNode <TA, TV> previous, TA argument, TV value)
        {
            if (null == previous)
            {
                throw new ArgumentNullException("previous");
            }

            Argument = argument;
            Value    = value;

            Previous      = previous;
            previous.Next = this;
        }
예제 #3
0
        internal FunctionNode(FunctionNode <TA, TV> previous, TV value)
        {
            if (null == previous)
            {
                throw new ArgumentNullException("previous");
            }

            if (previous.Terminating)
            {
                throw new ArgumentException("Function is already terminated.");
            }

            Value = value;

            Previous      = previous;
            previous.Next = this;

            Terminating = true;
            Constant    = true;
        }
예제 #4
0
 /// <summary>
 /// Завершает цепочку описания функции.
 /// </summary>
 /// <typeparam name="TA">Тип аргумента.</typeparam>
 /// <typeparam name="TV">Тип функции.</typeparam>
 /// <param name="previous">Предыдущий элемент цепочки.</param>
 /// <param name="value">Значение по умолчанию.</param>
 /// <returns>Вычисленное значение.</returns>
 public static FunctionNode <TA, TV> Otherwise <TA, TV>(this FunctionNode <TA, TV> previous, TV value)
 {
     return(new FunctionNode <TA, TV>(previous, value));
 }
예제 #5
0
 /// <summary>
 /// Продолжает цепочку описания функции и вычисляет ее.
 /// </summary>
 /// <typeparam name="TA">Тип аргумента.</typeparam>
 /// <typeparam name="TV">Тип функции.</typeparam>
 /// <param name="previous">Предыдущий элемент цепочки.</param>
 /// <param name="argument">Аргумент.</param>
 /// <param name="value">Значение.</param>
 /// <returns>Элемент цепочки.</returns>
 public static FunctionNode <TA, TV> On <TA, TV>(this FunctionNode <TA, TV> previous, TA argument, TV value)
 {
     return(new FunctionNode <TA, TV>(previous, argument, value));
 }