--- /dev/null
+package org.simantics.scl.compiler.internal.elaboration.subsumption;\r
+\r
+import java.util.ArrayList;\r
+\r
+\r
+public class VUnion {\r
+ Var low;\r
+ int con;\r
+ ArrayList<Var> vars;\r
+ \r
+ public VUnion(int con, ArrayList<Var> vars) {\r
+ this.con = con;\r
+ this.vars = vars; \r
+ }\r
+ \r
+ public void removeVar(Var var) {\r
+ if(vars.remove(var)) {\r
+ var.complexLowerBounds.remove(this);\r
+ var.markDirty();\r
+ }\r
+ }\r
+ \r
+ public void addVar(Var var) {\r
+ if(!vars.contains(var)) {\r
+ vars.add(var);\r
+ var.complexLowerBounds.add(this);\r
+ var.markDirty();\r
+ }\r
+ }\r
+ \r
+ public void makeLowerBound(int low) {\r
+ con |= ~low;\r
+ if(vars.size() == 1)\r
+ vars.get(0).addLowerBound(~con);\r
+ else\r
+ for(Var v : vars)\r
+ v.complexLowerBounds.add(this);\r
+ }\r
+ \r
+ public int getUpperApprox() {\r
+ int cur = con;\r
+ for(Var v : vars)\r
+ cur |= v.upperApprox;\r
+ return cur;\r
+ }\r
+ \r
+ @Override\r
+ public String toString() {\r
+ StringBuilder b = new StringBuilder();\r
+ boolean first = true;\r
+ if(con > 0) {\r
+ b.append(con);\r
+ first = false;\r
+ }\r
+ for(Var v : vars) {\r
+ if(first)\r
+ first = false;\r
+ else\r
+ b.append(" + ");\r
+ b.append(v.name);\r
+ }\r
+ return b.toString();\r
+ }\r
+}\r