bug fixes to handle propagation for FlatOpNode method for simple cases
[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; //Keeps track if the desc is a FieldDescriptor or TempDescriptor. Has same size() as desc
10                                 
11
12         public PrefetchPair() {
13         }
14
15         public PrefetchPair(TempDescriptor t) {
16                 base = t;
17                 desc = null;
18                 isTempDesc = null;
19         }
20
21         public PrefetchPair(TempDescriptor t, Descriptor f, Boolean type) {
22                 base = t;
23                 if (desc == null) 
24                         desc = new ArrayList<Descriptor>();
25                 if (isTempDesc == null)
26                         isTempDesc = new ArrayList<Boolean>();
27                 desc.add(f);
28                 isTempDesc.add(type);
29         }
30
31         public PrefetchPair(TempDescriptor t, ArrayList<Descriptor> descriptor, ArrayList<Boolean> bool) {
32                 base = t;
33                 if(desc == null){
34                         desc = new ArrayList<Descriptor>();
35                 }
36                 if(isTempDesc == null)
37                         isTempDesc = new ArrayList<Boolean>();
38                 desc.addAll(descriptor);
39                 isTempDesc.addAll(bool);
40         }
41
42         public TempDescriptor getBase() {
43                 return base;
44         }
45
46         public boolean isTempDescDesc(int index) {
47                 return isTempDesc.get(index).booleanValue();
48         }
49
50         public Descriptor getDescAt(int index) {
51                 return desc.get(index);
52         }
53
54         public ArrayList<Descriptor> getDesc() {
55                 return desc;
56         }
57
58         public ArrayList<Boolean> getisTempDesc() {
59                 return isTempDesc;
60         }
61
62         public FieldDescriptor getFieldDesc(int index) {
63                 return (FieldDescriptor) desc.get(index);
64         }
65
66         public TempDescriptor getTempDesc(int index) {
67                 return (TempDescriptor) desc.get(index);
68         }
69
70         public int hashCode() {
71                 int hashcode = base.toString().hashCode();
72                 if(desc != null) {
73                         ListIterator li = desc.listIterator();
74                         while(li.hasNext()) {
75                                 hashcode = hashcode ^ li.next().toString().hashCode();
76                         }
77                 }
78                 return hashcode;
79         }
80
81         public String toString() {
82                 String label= getBase().toString();
83                 if(getDesc() == null || getisTempDesc() == null)
84                         return label;
85                 ListIterator it=getDesc().listIterator();
86                 ListIterator istemp=getisTempDesc().listIterator();
87                 for(;it.hasNext() && istemp.hasNext();) {
88                         Boolean isFd = (Boolean) istemp.next();
89                         if(isFd.booleanValue() == false) {
90                                 FieldDescriptor fd = (FieldDescriptor) it.next();
91                                 label+="."+ fd.toString();
92                         } else { 
93                                 TempDescriptor td = (TempDescriptor) it.next();
94                                 label+="."+ td.toString();
95                         }
96                 }
97                 return label;
98         }
99
100         public boolean equals(Object o) {
101                 if(o instanceof PrefetchPair) {
102                         PrefetchPair pp = (PrefetchPair) o;
103                         if(base != pp.base) {
104                                 return false;
105                         }
106                         if (desc == null && pp.desc == null) {
107                                 return true;
108                         } else if (desc != null && pp.desc != null) {
109                                 if (desc.equals((List<Descriptor>)pp.desc) && 
110                                                 isTempDesc.equals((List<Boolean>)pp.isTempDesc)) {
111                                         return true;
112                                 } 
113                         }
114                 }
115                 return false;
116         }
117 }