a)Fix prefetch analysis bugs
[IRC.git] / Robust / src / Analysis / Prefetch / IndexDescriptor.java
1 /*
2  * IndexDescriptor.java
3  * Author: Alokika Dash adash@uci.edu
4  * Date: 11-02-2007
5  */
6
7 package Analysis.Prefetch;
8 import IR.Flat.*;
9 import java.util.*;
10 import IR.*;
11
12 /**
13  * Descriptor
14  *
15  * This class is used to represent the index and index offset of Arrays in
16  * a prefetch pair 
17  * for eg: for a prefetch pair a[i+z], an instance of this class stores var i and var z 
18  */
19
20 public class IndexDescriptor extends Descriptor {
21         public ArrayList<TempDescriptor> tddesc;
22         public Integer offset;
23
24         public IndexDescriptor(Integer offset) {
25                 super(offset.toString()); 
26                 this.offset = offset;
27         }
28
29         public IndexDescriptor(TempDescriptor tdesc, Integer offset) {
30                 super(tdesc.toString()); 
31                 if(tddesc == null)
32                         tddesc = new ArrayList<TempDescriptor>();
33                 tddesc.add(tdesc);
34                 this.offset = offset;
35         }
36
37         public IndexDescriptor() {
38                 super("Empty");
39                 tddesc = new ArrayList<TempDescriptor>();
40                 offset = 0;
41         }
42
43         public IndexDescriptor(ArrayList<TempDescriptor> tdesc, Integer offset) {
44                 super(tdesc.toString()); 
45                 if(tddesc == null)
46                         tddesc = new ArrayList<TempDescriptor>();
47                 tddesc.addAll(tdesc);
48                 this.offset = offset;
49         }
50
51         public ArrayList<TempDescriptor> getTempDesc() {
52                 return tddesc;
53         }
54
55         public TempDescriptor getTempDescAt(int index) {
56                 return ((TempDescriptor) (tddesc.get(index)));
57         }
58
59         public int getOffset() {
60                 return offset.intValue();
61         }
62
63         public String toString() {
64                 String label="[";
65                 if(getTempDesc() == null) {
66                         label += offset.toString();
67                         return label;
68                 } else {
69                         ListIterator lit = getTempDesc().listIterator();
70                         for(;lit.hasNext();) {
71                                 TempDescriptor td = (TempDescriptor) lit.next();
72                                 label += td.toString()+"+";
73                         }
74                         label +=offset.toString();
75                 }
76                 label += "]";
77                 return label;
78         }
79
80         public int hashCode() {
81                 int hashcode = (Integer) offset.hashCode();
82                 if(tddesc != null) {
83                         ListIterator lit = tddesc.listIterator();
84                         while(lit.hasNext()) {
85                                 hashcode = hashcode ^ lit.next().hashCode();
86                         }
87                 }
88                 return hashcode;
89         }
90
91         public boolean equals(Object o) {
92                 if(o instanceof IndexDescriptor) {
93                         IndexDescriptor idesc = (IndexDescriptor) o;
94                         if(!(offset.equals(idesc.offset))) {
95                                 return false;
96                         }
97                         if(tddesc == null && idesc.tddesc == null) {
98                                 return true;
99                         } else if(tddesc!=null && idesc.tddesc!=null) {
100                                 if(tddesc.equals((ArrayList<TempDescriptor>)idesc.tddesc)){
101                                         return true;
102                                 }
103                         }else {
104                                 return false;
105                         }
106                 }
107                 return false;
108         }
109 }