1 package Analysis.Locality;
2 import IR.MethodDescriptor;
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;
12 public LocalityBinding(MethodDescriptor md, boolean atomic) {
14 isglobal=new Integer[md.numParameters()];
18 private static String globalToString(Integer g) {
19 if (g==LocalityAnalysis.GLOBAL)
21 else if (g==LocalityAnalysis.LOCAL)
23 else if (g==LocalityAnalysis.EITHER)
25 else if (g==LocalityAnalysis.CONFLICT)
27 else throw new Error();
30 public String getSignature() {
36 st+=globalToString(isglobalthis);
37 for(int i=0;i<isglobal.length;i++) {
38 st+=globalToString(isglobal[i]);
44 /* Use this for an explanation */
45 public void setParent(LocalityBinding lb) {
49 public String getExplanation() {
53 return parent.getExplanation()+"\n"+toString();
56 public String toString() {
57 String st=md.toString()+" ";
58 for(int i=0;i<isglobal.length;i++)
59 if (isglobal[i].equals(LocalityAnalysis.LOCAL))
61 else if (isglobal[i].equals(LocalityAnalysis.GLOBAL))
63 else if (isglobal[i].equals(LocalityAnalysis.EITHER))
65 else if (isglobal[i].equals(LocalityAnalysis.CONFLICT))
70 public void setGlobal(int i, Integer global) {
74 public Integer isGlobal(int i) {
78 public void setGlobalReturn(Integer global) {
79 isglobalreturn=global;
82 public Integer getGlobalReturn() {
83 return isglobalreturn;
86 public void setGlobalThis(Integer global) {
90 public Integer getGlobalThis() {
94 public MethodDescriptor getMethod() {
98 public boolean isAtomic() {
102 public boolean equals(Object o) {
103 if (o instanceof LocalityBinding) {
104 LocalityBinding lb=(LocalityBinding)o;
107 for(int i=0;i<isglobal.length;i++)
108 if (!isglobal[i].equals(lb.isglobal[i]))
110 if (!isglobalthis.equals(lb.isglobalthis))
112 return (isatomic==lb.isatomic);
117 public int hashCode() {
118 int hashcode=md.hashCode();
119 for(int i=0;i<isglobal.length;i++) {
120 hashcode=hashcode*31+(isglobal[i].intValue());
122 hashcode=hashcode*31+(isatomic?1:0);