a1029265dec91756c895c55d689a55c112b009ba
[IRC.git] / Robust / src / Analysis / TaskStateAnalysis / FEdge.java
1 package Analysis.TaskStateAnalysis;
2 import IR.*;
3 import java.util.*;
4 import Util.Edge;
5
6 /* Edge *****************/
7
8 public class FEdge extends Edge {
9
10   private String label;
11   private TaskDescriptor td;
12   private int parameterindex;
13
14   // jzhou
15   private long executeTime;
16   private Hashtable<ClassDescriptor, NewObjInfo> newObjInfos;
17   private double probability;
18   private int invokeNum;
19   private int expInvokeNum;
20   private boolean m_isbackedge;
21   private int m_taskexitindex;
22
23   public class NewObjInfo {
24     int newRate;
25     double probability;
26     FlagState root;
27     int invokeNum;
28
29     public NewObjInfo() {
30       newRate = 0;
31       probability = 0;
32       root = null;
33       invokeNum = 0;
34     }
35
36     public NewObjInfo(int newRate, double probability) {
37       this.newRate = newRate;
38       this.probability = probability;
39     }
40
41     public int getNewRate() {
42       return this.newRate;
43     }
44
45     public void setNewRate(int newRate) {
46       this.newRate = newRate;
47     }
48
49     public double getProbability() {
50       return this.probability;
51     }
52
53     public void setProbability(double probability) {
54       this.probability = probability;
55     }
56
57     public FlagState getRoot() {
58       return root;
59     }
60
61     public void setRoot(FlagState root) {
62       this.root = root;
63     }
64
65     public int getInvokeNum() {
66       return invokeNum;
67     }
68
69     public void incInvokeNum() {
70       this.invokeNum++;
71     }
72
73     public boolean equals(Object o) {
74       if (o instanceof NewObjInfo) {
75         NewObjInfo e=(NewObjInfo)o;
76         if (e.newRate == this.newRate &&
77             e.probability == this.probability &&
78             e.invokeNum == this.invokeNum &&
79             e.root.equals(this.root)) {
80           return true;
81         }
82       }
83       return false;
84     }
85   }
86
87   /** Class Constructor
88    *
89    */
90   public FEdge(FlagState target, String label, TaskDescriptor td, int parameterindex) {
91     super(target);
92     this.label = label;
93     this.td=td;
94     this.parameterindex=parameterindex;
95     this.executeTime = -1;
96     this.newObjInfos = null;
97     this.probability = -1;
98     this.invokeNum = 0;
99     this.expInvokeNum = 0;
100     this.m_isbackedge = false;
101     this.m_taskexitindex = 0;
102   }
103
104   public int getTaskExitIndex() {
105     return m_taskexitindex;
106   }
107
108   public void setTaskExitIndex(int taskexitindex) {
109     this.m_taskexitindex = taskexitindex;
110   }
111
112   public double getProbability() {
113     return this.probability;
114   }
115
116   public void setProbability(double probability) {
117     this.probability = probability;
118   }
119
120   public boolean isbackedge() {
121     return m_isbackedge;
122   }
123
124   public void setisbackedge(boolean isbackedge) {
125     this.m_isbackedge = isbackedge;
126   }
127
128   public String getLabel() {
129     return label;
130   }
131
132   public int hashCode() {
133     int hashcode = label.hashCode()^target.hashCode()^source.hashCode()^parameterindex^(int)executeTime;
134     if (td!=null)
135       hashcode^=td.hashCode();
136     if(newObjInfos != null) {
137       hashcode ^= newObjInfos.hashCode();
138     }
139     return hashcode;
140   }
141
142   public TaskDescriptor getTask() {
143     return td;
144   }
145
146   public int getIndex() {
147     return parameterindex;
148   }
149
150   public boolean equals(Object o) {
151     if (o instanceof FEdge) {
152       FEdge e=(FEdge)o;
153       if (e.label.equals(label)&&
154           e.target.equals(target)&&
155           e.source.equals(source) &&
156           e.td==td&&
157           e.parameterindex==parameterindex &&
158           e.executeTime == executeTime &&
159           e.m_taskexitindex == m_taskexitindex &&
160           e.m_isbackedge == m_isbackedge) {
161         if(this.newObjInfos != null) {
162           if(e.newObjInfos == null) {
163             return false;
164           } else {
165             return e.newObjInfos.equals(this.newObjInfos);
166           }
167         }
168         return true;
169       }
170     }
171     return false;
172   }
173
174   public long getExeTime() {
175     return this.executeTime;
176   }
177
178   public void setExeTime(long eTime) {
179     this.executeTime = eTime;
180   }
181
182   public Hashtable<ClassDescriptor, NewObjInfo> getNewObjInfoHashtable() {
183     return this.newObjInfos;
184   }
185
186   public NewObjInfo getNewObjInfo(ClassDescriptor cd) {
187     if(this.newObjInfos == null) {
188       return null;
189     }
190     return this.newObjInfos.get(cd);
191   }
192
193   public void addNewObjInfo(ClassDescriptor cd, int newRate, double probability) {
194     if(this.newObjInfos == null) {
195       this.newObjInfos = new Hashtable<ClassDescriptor, NewObjInfo>();
196     }
197     this.newObjInfos.put(cd, new NewObjInfo(newRate, probability));
198   }
199
200   public void init4Simulate() {
201     this.invokeNum = 0;
202     this.expInvokeNum = 0;
203     if(this.newObjInfos != null) {
204       Iterator<NewObjInfo> it_nobjs = this.newObjInfos.values().iterator();
205       while(it_nobjs.hasNext()) {
206         it_nobjs.next().invokeNum = 0;
207       }
208     }
209   }
210
211   public void process() {
212     this.invokeNum++;
213   }
214
215   public int getInvokeNum() {
216     return invokeNum;
217   }
218
219   public int getInvokeNumGap() {
220     return this.expInvokeNum - this.invokeNum;
221   }
222
223   public int getInvokeNumGapByObj(int byObj) {
224     return this.expInvokeNum - (this.invokeNum/byObj);
225   }
226
227   public void setExpInvokeNum(int expInvokeNum) {
228     this.expInvokeNum = expInvokeNum;
229   }
230
231 }