]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/planning/items/CheckPrePlanItem.java
Merge "List the unsatisfied dependencies in CanvasContext"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / planning / items / CheckPrePlanItem.java
1 package org.simantics.scl.compiler.elaboration.chr.planning.items;\r
2 \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
7 \r
8 import gnu.trove.set.hash.TIntHashSet;\r
9 \r
10 public class CheckPrePlanItem extends PrePlanItem {\r
11     public Expression condition;\r
12     public TIntHashSet variableSet;\r
13 \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
20     }\r
21 \r
22     @Override\r
23     public void initializeListeners(QueryPlanningContext context) {\r
24         context.listen(variableSet, this);\r
25     }\r
26 \r
27     @Override\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
33         }\r
34     }\r
35     \r
36     @Override\r
37     public void generate(QueryPlanningContext context) {\r
38         context.addPlanOp(new CheckOp(location, condition));\r
39         context.bind(variableSet);\r
40     }\r
41 }\r