]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/subsumption/VUnion.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / elaboration / subsumption / VUnion.java
1 package org.simantics.scl.compiler.internal.elaboration.subsumption;\r
2 \r
3 import java.util.ArrayList;\r
4 \r
5 \r
6 public class VUnion {\r
7     Var low;\r
8     int con;\r
9     ArrayList<Var> vars;\r
10     \r
11     public VUnion(int con, ArrayList<Var> vars) {\r
12         this.con = con;\r
13         this.vars = vars;        \r
14     }\r
15     \r
16     public void removeVar(Var var) {\r
17         if(vars.remove(var)) {\r
18             var.complexLowerBounds.remove(this);\r
19             var.markDirty();\r
20         }\r
21     }\r
22     \r
23     public void addVar(Var var) {\r
24         if(!vars.contains(var)) {\r
25             vars.add(var);\r
26             var.complexLowerBounds.add(this);\r
27             var.markDirty();\r
28         }\r
29     }\r
30     \r
31     public void makeLowerBound(int low) {\r
32         con |= ~low;\r
33         if(vars.size() == 1)\r
34             vars.get(0).addLowerBound(~con);\r
35         else\r
36             for(Var v : vars)\r
37                 v.complexLowerBounds.add(this);\r
38     }\r
39     \r
40     public int getUpperApprox() {\r
41         int cur = con;\r
42         for(Var v : vars)\r
43             cur |= v.upperApprox;\r
44         return cur;\r
45     }\r
46     \r
47     @Override\r
48     public String toString() {\r
49         StringBuilder b = new StringBuilder();\r
50         boolean first = true;\r
51         if(con > 0) {\r
52             b.append(con);\r
53             first = false;\r
54         }\r
55         for(Var v : vars) {\r
56             if(first)\r
57                 first = false;\r
58             else\r
59                 b.append(" + ");\r
60             b.append(v.name);\r
61         }\r
62         return b.toString();\r
63     }\r
64 }\r