+package org.simantics.scl.compiler.elaboration.chr.planning.items;\r
+\r
+import org.simantics.scl.compiler.elaboration.chr.plan.CheckOp;\r
+import org.simantics.scl.compiler.elaboration.chr.planning.PrePlanItem;\r
+import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext;\r
+import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
+\r
+import gnu.trove.set.hash.TIntHashSet;\r
+\r
+public class CheckPrePlanItem extends PrePlanItem {\r
+ public Expression condition;\r
+ public TIntHashSet variableSet;\r
+\r
+ public CheckPrePlanItem(Expression condition, TIntHashSet variableSet, int secondaryPriority) {\r
+ super(secondaryPriority);\r
+ this.variableSet = variableSet;\r
+ this.condition = condition;\r
+ if(variableSet.isEmpty())\r
+ primaryPriority = 0.0;\r
+ }\r
+\r
+ @Override\r
+ public void initializeListeners(QueryPlanningContext context) {\r
+ context.listen(variableSet, this);\r
+ }\r
+\r
+ @Override\r
+ public void variableSolved(QueryPlanningContext context, int variableId) {\r
+ variableSet.remove(variableId);\r
+ if(variableSet.isEmpty()) {\r
+ primaryPriority = 0.0;\r
+ context.priorityQueue.adjust(this);\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public void generate(QueryPlanningContext context) {\r
+ context.addPlanOp(new CheckOp(location, condition));\r
+ context.bind(variableSet);\r
+ }\r
+}\r