private object GetObjectValue(Flow flow)
        {
            object obj = flow.GetValue <object>(arguments[0]);

            for (int i = 1; i < argumentCount; i++)
            {
                switch (OperationType)
                {
                case MathType.Add:
                    obj = OperatorUtility.Add(obj, flow.GetValue <object>(arguments[i]));
                    break;

                case MathType.Subtract:
                    obj = OperatorUtility.Subtract(obj, flow.GetValue <object>(arguments[i]));
                    break;

                case MathType.Multiply:
                    obj = OperatorUtility.Multiply(obj, flow.GetValue <object>(arguments[i]));
                    break;

                case MathType.Divide:
                    obj = OperatorUtility.Divide(obj, flow.GetValue <object>(arguments[i]));
                    break;

                default:
                    break;
                }
            }

            return(obj);
        }
示例#2
0
        public override object Operation(IEnumerable <object> values)
        {
            var valueList = values.ToList();
            var result    = OperatorUtility.Add(valueList[0], valueList[1]);

            for (int i = 2; i < valueList.Count; i++)
            {
                result = OperatorUtility.Add(result, valueList[i]);
            }

            return(result);
        }
示例#3
0
 public override object Operation(object a, object b)
 {
     return(OperatorUtility.Add(a, b));
 }
        public override void Visit(BinaryExpression binary)
        {
            // Simulate Lazy<Func<>> behavior for late evaluation
            object        leftValue = null;
            Func <object> left      = () =>
            {
                if (leftValue == null)
                {
                    binary.LeftExpression.Accept(this);
                    leftValue = Result;
                }
                return(leftValue);
            };

            // Simulate Lazy<Func<>> behavior for late evaluation
            object        rightValue = null;
            Func <object> right      = () =>
            {
                if (rightValue == null)
                {
                    binary.RightExpression.Accept(this);
                    rightValue = Result;
                }
                return(rightValue);
            };

            switch (binary.Type)
            {
            case BinaryExpressionType.And:
                Result = ConversionUtility.Convert <bool>(left()) && ConversionUtility.Convert <bool>(right());
                break;

            case BinaryExpressionType.Or:
                Result = ConversionUtility.Convert <bool>(left()) || ConversionUtility.Convert <bool>(right());
                break;

            case BinaryExpressionType.Div:
                Result = OperatorUtility.Divide(left(), right());
                break;

            case BinaryExpressionType.Equal:
                Result = OperatorUtility.Equal(left(), right());
                break;

            case BinaryExpressionType.Greater:
                Result = OperatorUtility.GreaterThan(left(), right());
                break;

            case BinaryExpressionType.GreaterOrEqual:
                Result = OperatorUtility.GreaterThanOrEqual(left(), right());
                break;

            case BinaryExpressionType.Lesser:
                Result = OperatorUtility.LessThan(left(), right());
                break;

            case BinaryExpressionType.LesserOrEqual:
                Result = OperatorUtility.LessThanOrEqual(left(), right());
                break;

            case BinaryExpressionType.Minus:
                Result = OperatorUtility.Subtract(left(), right());
                break;

            case BinaryExpressionType.Modulo:
                Result = OperatorUtility.Modulo(left(), right());
                break;

            case BinaryExpressionType.NotEqual:
                Result = OperatorUtility.NotEqual(left(), right());
                break;

            case BinaryExpressionType.Plus:
                Result = OperatorUtility.Add(left(), right());
                break;

            case BinaryExpressionType.Times:
                Result = OperatorUtility.Multiply(left(), right());
                break;

            case BinaryExpressionType.BitwiseAnd:
                Result = OperatorUtility.And(left(), right());
                break;

            case BinaryExpressionType.BitwiseOr:
                Result = OperatorUtility.Or(left(), right());
                break;

            case BinaryExpressionType.BitwiseXOr:
                Result = OperatorUtility.ExclusiveOr(left(), right());
                break;

            case BinaryExpressionType.LeftShift:
                Result = OperatorUtility.LeftShift(left(), right());
                break;

            case BinaryExpressionType.RightShift:
                Result = OperatorUtility.RightShift(left(), right());
                break;
            }
        }