Accord.Math.Optimization.NonlinearConstraint.parse C# (CSharp) Method

parse() private static method

private static parse ( bool>.Expression constraint, double>.Func &function, ConstraintType &shouldBe, double &value ) : void
constraint bool>.Expression
function double>.Func
shouldBe ConstraintType
value double
return void
        private static void parse(Expression<Func<double[], bool>> constraint,
            out Func<double[], double> function, out ConstraintType shouldBe, out double value)
        {
            var expression = constraint.Body as BinaryExpression;

            var comparisonType = expression.NodeType;

            switch (comparisonType)
            {
                case ExpressionType.LessThanOrEqual:
                    shouldBe = ConstraintType.LesserThanOrEqualTo;
                    break;

                case ExpressionType.GreaterThanOrEqual:
                    shouldBe = ConstraintType.GreaterThanOrEqualTo;
                    break;

                case ExpressionType.Equal:
                    shouldBe = ConstraintType.EqualTo;
                    break;

                default:
                    throw new NotSupportedException(comparisonType + " is not supported.");
            }

            var left = expression.Left;
            var right = expression.Right as ConstantExpression;

            var functionExpression = Expression.Lambda(left, constraint.Parameters.ToArray());

            function = functionExpression.Compile() as Func<double[], double>;

            value = (Double)right.Value;
        }