@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; }
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; }
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(); } }
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; } }