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