Exemplo n.º 1
0
 @Override
 public Bit eval(PicksRO picks) {
   int unassignedCount = 0;
   for (BoolExpr expr : exprList) {
     Bit val = expr.eval(picks);
     if (val.isFalse()) return Bit.FALSE;
     if (val.isUnassigned()) unassignedCount++;
   }
   if (unassignedCount > 0) return Bit.UNASSIGNED;
   return Bit.TRUE;
 }
Exemplo n.º 2
0
 @Override
 public List<Var> isConjunctionOfVars() {
   List<Var> vars = null;
   for (BoolExpr expr : exprList) {
     Var var = expr.asVar();
     if (var != null) {
       if (vars == null) vars = new ArrayList<Var>();
       vars.add(var);
     }
   }
   return vars;
 }
Exemplo n.º 3
0
  private boolean autoAssignTrue(Picks picks) throws IllegalPicksStateException {
    boolean anyChange = false;

    for (int i = 0; i < exprList.size(); i++) {
      BoolExpr boolExpr = exprList.get(i);
      Bit value = boolExpr.eval(picks);
      if (value.isFalse()) {
        String s1 = boolExpr.toString();
        throw new IllegalPicksStateException(s1 + " evals to false");
      }
    }

    for (int i = 0; i < exprList.size(); i++) {
      BoolExpr expr = exprList.get(i);
      boolean ch = expr.autoAssign(picks, true);
      if (ch) anyChange = true;
    }

    return anyChange;
  }
Exemplo n.º 4
0
  private boolean autoAssignFalse(Picks picks) {

    int exprCount = exprList.size();

    int trueCount = 0;
    int falseCount = 0;
    int nullCount = 0;
    BoolExpr nullExpr = null;

    for (int i = 0; i < exprCount; i++) {
      BoolExpr expr = exprList.get(i);
      Bit value = expr.eval(picks);
      switch (value) {
        case TRUE:
          trueCount++;
          break;
        case FALSE:
          falseCount++;
          break;
        case UNASSIGNED:
          nullCount++;
          nullExpr = expr;
          break;
        default:
          throw new IllegalStateException();
      }
    }

    if (trueCount == (exprCount - 1) && nullCount == 1) {
      assert nullExpr != null;
      return nullExpr.autoAssign(picks, false);
    } else if (trueCount == exprCount) {
      throw new IllegalPicksStateException();
    } else {
      return false;
    }
  }
Exemplo n.º 5
0
 public ComparableList<Value> execute(Expr expr, ArrayList<MyIterator> iterators, BoolExpr bool) {
   mList = new ComparableList<Value>();
   if (iterators.isEmpty()) {
     if (bool == null || bool.eval()) {
       mList.add(expr.eval()); // TODO auswerten
     }
     return mList;
   }
   MyIterator myIt = iterators.get(0);
   Value val = myIt.getExpr().eval();
   iterators.remove(0);
   if (val instanceof SetOrList) {
     SetOrList sol = (SetOrList) val;
     Iterator<Value> it = sol.iterator();
     while (it.hasNext()) {
       Environment.putValue(myIt.getVariable(), it.next());
       mList.addAll(execute(expr, iterators, bool));
     }
     return mList;
   } else {
     throw new RuntimeException();
   }
 }