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