Add beginning of support for dsm
[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
11     public LocalityBinding(MethodDescriptor md, boolean atomic) {
12         this.md=md;
13         isglobal=new Integer[md.numParameters()];
14         isatomic=atomic;
15     }
16
17     public String toString() {
18         String st=md.toString()+" ";
19         for(int i=0;i<isglobal.length;i++)
20             if (isglobal[i].equals(LocalityAnalysis.LOCAL))
21                 st+="local ";
22             else if (isglobal[i].equals(LocalityAnalysis.GLOBAL))
23                 st+="global ";
24             else if (isglobal[i].equals(LocalityAnalysis.EITHER))
25                 st+="either ";
26             else if (isglobal[i].equals(LocalityAnalysis.CONFLICT))
27                 st+="conflict ";
28         return st;
29     }
30
31     public void setGlobal(int i, Integer global) {
32         isglobal[i]=global;
33     }
34
35     public Integer isGlobal(int i) {
36         return isglobal[i];
37     }
38
39     public void setGlobalReturn(Integer global) {
40         isglobalreturn=global;
41     }
42
43     public Integer getGlobalReturn() {
44         return isglobalreturn;
45     }
46
47     public void setGlobalThis(Integer global) {
48         isglobalthis=global;
49     }
50
51     public Integer getGlobalThis() {
52         return isglobalthis;
53     }
54
55     public MethodDescriptor getMethod() {
56         return md;
57     }
58
59     public boolean isAtomic() {
60         return isatomic;
61     }
62
63     public boolean equals(Object o) {
64         if (o instanceof LocalityBinding) {
65             LocalityBinding lb=(LocalityBinding)o;
66             if (md!=lb.md)
67                 return false;
68             for(int i=0;i<isglobal.length;i++)
69                 if (!isglobal[i].equals(lb.isglobal[i]))
70                     return false;
71             if (!isglobalthis.equals(lb.isglobalthis))
72                 return false;
73             return (isatomic==lb.isatomic);
74         }
75         return false;
76     }
77
78     public int hashCode() {
79         int hashcode=md.hashCode();
80         for(int i=0;i<isglobal.length;i++) {
81             hashcode=hashcode*31+(isglobal[i].intValue());
82         }
83         hashcode=hashcode*31+(isatomic?1:0);
84         return hashcode;
85     }
86 }