More reachability implementation, no token propagation yet.
[IRC.git] / Robust / src / Analysis / OwnershipAnalysis / ReferenceEdgeProperties.java
1 package Analysis.OwnershipAnalysis;
2
3 public class ReferenceEdgeProperties {
4
5     protected boolean isUnique;
6     protected boolean isInitialParamReflexive;
7
8     protected ReachabilitySet beta;
9     protected ReachabilitySet betaNew;
10
11
12     public ReferenceEdgeProperties() {
13         this.isUnique                = false;
14         this.isInitialParamReflexive = false;
15         this.beta                    = new ReachabilitySet();
16         this.betaNew                 = null;
17     }    
18
19     public ReferenceEdgeProperties( boolean isUnique ) {
20         this.isUnique                = isUnique;
21         this.isInitialParamReflexive = false;
22         this.beta                    = new ReachabilitySet();
23         this.betaNew                 = null;
24     }
25
26     public ReferenceEdgeProperties( boolean isUnique,
27                                     boolean isInitialParamReflexive ) {
28         this.isUnique                = isUnique;
29         this.isInitialParamReflexive = isInitialParamReflexive;
30         this.beta                    = new ReachabilitySet();
31         this.betaNew                 = null;
32     }
33
34     public ReferenceEdgeProperties( boolean         isUnique,
35                                     boolean         isInitialParamReflexive,
36                                     ReachabilitySet beta) {
37         this.isUnique                = isUnique;
38         this.isInitialParamReflexive = isInitialParamReflexive;
39         this.beta                    = beta;
40         this.betaNew                 = null;
41     }
42
43
44     public ReferenceEdgeProperties copy() {
45         return new ReferenceEdgeProperties( isUnique,
46                                             isInitialParamReflexive,
47                                             beta );
48     }
49
50
51
52     public boolean isUnique() {
53         return isUnique;
54     }
55     public void setIsUnique( boolean isUnique ) {
56         this.isUnique = isUnique;
57     }
58
59
60
61     public boolean isInitialParamReflexive() {
62         return isInitialParamReflexive;
63     }
64     public void setIsInitialParamReflexive( boolean isInitialParamReflexive ) {
65         this.isInitialParamReflexive = isInitialParamReflexive;
66     }
67
68
69
70     public ReachabilitySet getBeta() {
71         return beta;
72     }
73     public void setBeta( ReachabilitySet beta ) {
74         this.beta = beta;
75     }
76
77     public ReachabilitySet getBetaNew() {
78         return betaNew;
79     }
80     public void setBetaNew( ReachabilitySet beta ) {
81         this.betaNew = beta;
82     }
83     public void applyBetaNew() {
84         assert betaNew != null;
85         beta    = betaNew;
86         betaNew = null;
87     }
88
89
90     public boolean equals( ReferenceEdgeProperties rep ) {
91         return isUnique                == rep.isUnique()                &&
92                isInitialParamReflexive == rep.isInitialParamReflexive();
93     }
94
95     public String getBetaString() {
96         return beta.toStringEscapeNewline();
97     }
98     
99     public String toEdgeLabelString() {
100         String edgeLabel = "";
101         /*
102         if( rep.isUnique() ) {
103           edgeLabel += "Unq";
104         }
105         */
106         if( isInitialParamReflexive ) {
107             edgeLabel += "Rflx\\n";
108         }
109         edgeLabel += getBetaString();
110         return edgeLabel;
111     }
112 }