add more comments
[IRC.git] / Robust / src / Analysis / Locality / LocalityBinding.java
1 package Analysis.Locality;
2 import IR.MethodDescriptor;
3
4 public class LocalityBinding {
5     private MethodDescriptor md;
6     private Integer[] isglobal;
7     private boolean isatomic;
8     private Integer isglobalreturn;
9     private Integer isglobalthis;
10     private LocalityBinding parent;
11
12     public LocalityBinding(MethodDescriptor md, boolean atomic) {
13         this.md=md;
14         isglobal=new Integer[md.numParameters()];
15         isatomic=atomic;
16     }
17
18     /* Use this for an explanation */
19     public void setParent(LocalityBinding lb) {
20         parent=lb;
21     }
22
23     public String getExplanation() {
24         if (parent==null)
25             return toString();
26         else
27             return parent.getExplanation()+"\n"+toString();
28     }
29
30     public String toString() {
31         String st=md.toString()+" ";
32         for(int i=0;i<isglobal.length;i++)
33             if (isglobal[i].equals(LocalityAnalysis.LOCAL))
34                 st+="local ";
35             else if (isglobal[i].equals(LocalityAnalysis.GLOBAL))
36                 st+="global ";
37             else if (isglobal[i].equals(LocalityAnalysis.EITHER))
38                 st+="either ";
39             else if (isglobal[i].equals(LocalityAnalysis.CONFLICT))
40                 st+="conflict ";
41         return st;
42     }
43
44     public void setGlobal(int i, Integer global) {
45         isglobal[i]=global;
46     }
47
48     public Integer isGlobal(int i) {
49         return isglobal[i];
50     }
51
52     public void setGlobalReturn(Integer global) {
53         isglobalreturn=global;
54     }
55
56     public Integer getGlobalReturn() {
57         return isglobalreturn;
58     }
59
60     public void setGlobalThis(Integer global) {
61         isglobalthis=global;
62     }
63
64     public Integer getGlobalThis() {
65         return isglobalthis;
66     }
67
68     public MethodDescriptor getMethod() {
69         return md;
70     }
71
72     public boolean isAtomic() {
73         return isatomic;
74     }
75
76     public boolean equals(Object o) {
77         if (o instanceof LocalityBinding) {
78             LocalityBinding lb=(LocalityBinding)o;
79             if (md!=lb.md)
80                 return false;
81             for(int i=0;i<isglobal.length;i++)
82                 if (!isglobal[i].equals(lb.isglobal[i]))
83                     return false;
84             if (!isglobalthis.equals(lb.isglobalthis))
85                 return false;
86             return (isatomic==lb.isatomic);
87         }
88         return false;
89     }
90
91     public int hashCode() {
92         int hashcode=md.hashCode();
93         for(int i=0;i<isglobal.length;i++) {
94             hashcode=hashcode*31+(isglobal[i].intValue());
95         }
96         hashcode=hashcode*31+(isatomic?1:0);
97         return hashcode;
98     }
99 }