several bug fixes
[IRC.git] / Robust / src / Analysis / Prefetch / PrefetchPair.java
1 package Analysis.Prefetch;
2 import IR.Flat.*;
3 import java.util.*;
4 import IR.*;
5
6 public class PrefetchPair {
7         TempDescriptor base;
8         ArrayList<Descriptor> desc;
9         ArrayList<Boolean> isTempDesc;
10
11         public PrefetchPair() {
12         }
13
14         public PrefetchPair(TempDescriptor t) {
15                 base = t;
16                 desc = null;
17                 isTempDesc = null;
18         }
19
20         public PrefetchPair(TempDescriptor t, Descriptor f, Boolean type) {
21                 base = t;
22                 if (desc == null) 
23                         desc = new ArrayList<Descriptor>();
24                 if (isTempDesc == null)
25                         isTempDesc = new ArrayList<Boolean>();
26                 desc.add(f);
27                 isTempDesc.add(type);
28         }
29
30         public PrefetchPair(TempDescriptor t, ArrayList<Descriptor> descriptor, ArrayList<Boolean> bool) {
31                 base = t;
32                 if(desc == null){
33                         desc = new ArrayList<Descriptor>();
34                 }
35                 if(isTempDesc == null)
36                         isTempDesc = new ArrayList<Boolean>();
37                 desc.addAll(descriptor);
38                 isTempDesc.addAll(bool);
39         }
40
41         public TempDescriptor getBase() {
42                 return base;
43         }
44
45         public boolean isTempDescDesc(int index) {
46                 return isTempDesc.get(index).booleanValue();
47         }
48
49         public Descriptor getDescAt(int index) {
50                 return desc.get(index);
51         }
52
53         public ArrayList<Descriptor> getDesc() {
54                 return desc;
55         }
56
57         public ArrayList<Boolean> getisTempDesc() {
58                 return isTempDesc;
59         }
60
61         public FieldDescriptor getFieldDesc(int index) {
62                 return (FieldDescriptor) desc.get(index);
63         }
64
65         public TempDescriptor getTempDesc(int index) {
66                 return (TempDescriptor) desc.get(index);
67         }
68
69         public int hashCode() {
70                 int hashcode = base.hashCode(); 
71                 if(getDesc() != null) {
72                         ListIterator li = desc.listIterator();
73                         while(li.hasNext()) {
74                                 hashcode = hashcode ^ li.next().hashCode();
75                         }
76                 }
77                 return hashcode;
78         }
79
80         public String toString() {
81                 String label= getBase().toString();
82                 if(getDesc() == null || getisTempDesc() == null)
83                         return label;
84                 ListIterator it=getDesc().listIterator();
85                 ListIterator istemp=getisTempDesc().listIterator();
86                 for(;it.hasNext() && istemp.hasNext();) {
87                         Boolean isFd = (Boolean) istemp.next();
88                         if(isFd.booleanValue() == false) {
89                                 FieldDescriptor fd = (FieldDescriptor) it.next();
90                                 label+="."+ fd.toString();
91                         } else { 
92                                 TempDescriptor td = (TempDescriptor) it.next();
93                                 label+="."+ td.toString();
94                         }
95                 }
96                 return label;
97         }
98
99         public boolean equals(Object o) {
100                 if(o instanceof PrefetchPair) {
101                         PrefetchPair pp = (PrefetchPair) o;
102                         if(base != pp.base)
103                                 return false;
104                         if (desc.equals((List<Descriptor>)pp.desc) && isTempDesc.equals((List<Boolean>)pp.isTempDesc))
105                                 return true;
106                         else
107                                 return false;
108                 }
109                 return false;
110         }
111 }