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