示例#1
0
  @Override
  public Constraint getConstraint() {
    if (!isSatisfiable || !isSymbolic()) return null;

    Expression left = o1.getSymbolicValue();
    Expression right = o2.getSymbolicValue();
    assert left != null && right != null;

    if (left instanceof RealExpression && right instanceof RealExpression)
      constraint = new RealConstraint((RealExpression) left, cmp, (RealExpression) right);
    else if (left instanceof IntegerExpression && right instanceof IntegerExpression) {
      if (left instanceof LinearIntegerExpression && right instanceof LinearIntegerExpression)
        constraint =
            new LinearIntegerConstraint((IntegerExpression) left, cmp, (IntegerExpression) right);
      else
        constraint =
            new NonLinearIntegerConstraint(
                (IntegerExpression) left, cmp, (IntegerExpression) right);
    } else if (left instanceof RealExpression)
      constraint = new MixedConstraint((RealExpression) left, cmp, (IntegerExpression) right);
    else constraint = new MixedConstraint((RealExpression) right, cmp, (IntegerExpression) left);
    return constraint;
  }