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;
}