]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java
Merge "Remove unused import in DeleteHandler"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / CHRQuery.java
1 package org.simantics.scl.compiler.elaboration.chr;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.chr.plan.PostCommitOp;\r
4 import org.simantics.scl.compiler.elaboration.chr.plan.PreCommitOp;\r
5 import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext;\r
6 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;\r
7 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;\r
8 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;\r
9 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
10 import org.simantics.scl.compiler.elaboration.expressions.Variable;\r
11 import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;\r
12 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;\r
13 import org.simantics.scl.compiler.errors.Locations;\r
14 import org.simantics.scl.compiler.internal.parsing.Symbol;\r
15 \r
16 import gnu.trove.map.hash.TObjectIntHashMap;\r
17 import gnu.trove.set.hash.THashSet;\r
18 import gnu.trove.set.hash.TIntHashSet;\r
19 \r
20 public class CHRQuery extends Symbol {\r
21     public CHRLiteral[] literals;\r
22 \r
23     public CHRQuery(CHRLiteral[] literals) {\r
24         this.literals = literals;\r
25     }\r
26 \r
27     public void resolve(TranslationContext context) {\r
28         for(CHRLiteral literal : literals)\r
29             literal.resolve(context);\r
30     }\r
31 \r
32     public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {\r
33         for(CHRLiteral literal : literals)\r
34             literal.collectRefs(allRefs, refs);\r
35     }\r
36 \r
37     public void checkType(TypingContext context) {\r
38         for(CHRLiteral literal : literals)\r
39             literal.checkType(context);\r
40     }\r
41     \r
42     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {\r
43         for(CHRLiteral literal : literals)\r
44             literal.collectVars(allVars, vars);\r
45     }\r
46 \r
47     public void forVariables(VariableProcedure procedure) {\r
48         for(CHRLiteral literal : literals)\r
49             literal.forVariables(procedure);\r
50     }\r
51 \r
52     public void collectFreeVariables(THashSet<Variable> vars) {\r
53         for(CHRLiteral literal : literals)\r
54             literal.collectFreeVariables(vars);\r
55     }\r
56 \r
57     public void setLocationDeep(long loc) {\r
58         if(location == Locations.NO_LOCATION) {\r
59             this.location = loc;\r
60             for(CHRLiteral literal : literals)\r
61                 literal.setLocationDeep(loc);\r
62         }\r
63     }\r
64     \r
65     public void createQueryPlan(QueryPlanningContext context, Expression inputFact, int activeLiteralId) {\r
66         for(int i=0;i<literals.length;++i) {\r
67             CHRLiteral literal = literals[i];\r
68             if(i == activeLiteralId)\r
69                 context.activate(literal, inputFact, i);\r
70             else\r
71                 context.add(literal, i);\r
72         }\r
73         context.createQueryPlan();\r
74     }\r
75     \r
76     public void simplify(SimplificationContext context) {\r
77         for(CHRLiteral literal : literals)\r
78             literal.simplify(context);\r
79     }\r
80 \r
81     public void createEnforcePlan(QueryPlanningContext context, int priority) {\r
82         context.addPlanOp(new PreCommitOp(location));\r
83         for(CHRLiteral literal : literals)\r
84             context.claim(context, literal);\r
85         context.addPlanOp(new PostCommitOp(location, priority));\r
86     }\r
87     \r
88     public String toString() {\r
89         StringBuilder b = new StringBuilder();\r
90         ExpressionToStringVisitor visitor = new ExpressionToStringVisitor(b);\r
91         visitor.visit(this);\r
92         return b.toString();\r
93     }\r
94 }\r