1 package org.simantics.scl.compiler.elaboration.chr.planning.items;
3 import org.simantics.scl.compiler.elaboration.chr.plan.CheckOp;
4 import org.simantics.scl.compiler.elaboration.chr.planning.PrePlanItem;
5 import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext;
6 import org.simantics.scl.compiler.elaboration.expressions.Expression;
8 import gnu.trove.set.hash.TIntHashSet;
10 public class CheckPrePlanItem extends PrePlanItem {
11 public Expression condition;
12 public TIntHashSet variableSet;
14 public CheckPrePlanItem(Expression condition, TIntHashSet variableSet, int secondaryPriority) {
15 super(secondaryPriority);
16 this.variableSet = variableSet;
17 this.condition = condition;
18 if(variableSet.isEmpty())
19 primaryPriority = 0.0;
23 public void initializeListeners(QueryPlanningContext context) {
24 context.listen(variableSet, this);
28 public void variableSolved(QueryPlanningContext context, int variableId) {
29 variableSet.remove(variableId);
30 if(variableSet.isEmpty()) {
31 primaryPriority = 0.0;
32 context.priorityQueue.adjust(this);
37 public void generate(QueryPlanningContext context) {
38 context.addPlanOp(new CheckOp(location, condition));
39 context.bind(variableSet);