change
[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 int 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^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         if(this.newObjInfos != null) {
160           if(e.newObjInfos == null) {
161             return false;
162           } else {
163             return e.newObjInfos.equals(this.newObjInfos);
164           }
165         }
166         return true;
167       }
168     }
169     return false;
170   }
171
172   public int getExeTime() {
173     return this.executeTime;
174   }
175
176   public void setExeTime(int eTime) {
177     this.executeTime = eTime;
178   }
179
180   public Hashtable<ClassDescriptor, NewObjInfo> getNewObjInfoHashtable() {
181     return this.newObjInfos;
182   }
183
184   public NewObjInfo getNewObjInfo(ClassDescriptor cd) {
185     if(this.newObjInfos == null) {
186       return null;
187     }
188     return this.newObjInfos.get(cd);
189   }
190
191   public void addNewObjInfo(ClassDescriptor cd, int newRate, double probability) {
192     if(this.newObjInfos == null) {
193       this.newObjInfos = new Hashtable<ClassDescriptor, NewObjInfo>();
194     }
195     this.newObjInfos.put(cd, new NewObjInfo(newRate, probability));
196   }
197
198   public void process() {
199     this.invokeNum++;
200   }
201
202   public int getInvokeNum() {
203     return invokeNum;
204   }
205
206   public int getInvokeNumGap() {
207     return this.expInvokeNum - this.invokeNum;
208   }
209   
210   public int getInvokeNumGapByObj(int byObj) {
211       return this.expInvokeNum - (this.invokeNum/byObj);
212   }
213
214   public void setExpInvokeNum(int expInvokeNum) {
215     this.expInvokeNum = expInvokeNum;
216   }
217
218 }