00001 package edu.ksu.cis.bandera.birp.node;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 import ca.mcgill.sable.util.*;
00037 import edu.ksu.cis.bandera.birp.analysis.*;
00038
00039 public final class ANonemptyLiveset extends PLiveset
00040 {
00041 private TLive _live_;
00042 private TLbrace _lbrace_;
00043 private TId _first_;
00044 private final LinkedList _rest_ = new TypedLinkedList(new Rest_Cast());
00045 private TRbrace _rbrace_;
00046
00047 private class Rest_Cast implements Cast
00048 {
00049 public Object cast(Object o)
00050 {
00051 PLivevar node = (PLivevar) o;
00052
00053 if((node.parent() != null) &&
00054 (node.parent() != ANonemptyLiveset.this))
00055 {
00056 node.parent().removeChild(node);
00057 }
00058
00059 if((node.parent() == null) ||
00060 (node.parent() != ANonemptyLiveset.this))
00061 {
00062 node.parent(ANonemptyLiveset.this);
00063 }
00064
00065 return node;
00066 }
00067 }
00068 public ANonemptyLiveset()
00069 {
00070 }
00071 public ANonemptyLiveset(
00072 TLive _live_,
00073 TLbrace _lbrace_,
00074 TId _first_,
00075 List _rest_,
00076 TRbrace _rbrace_)
00077 {
00078 setLive(_live_);
00079
00080 setLbrace(_lbrace_);
00081
00082 setFirst(_first_);
00083
00084 {
00085 Object temp[] = _rest_.toArray();
00086 for(int i = 0; i < temp.length; i++)
00087 {
00088 this._rest_.add(temp[i]);
00089 }
00090 }
00091
00092 setRbrace(_rbrace_);
00093
00094 }
00095 public ANonemptyLiveset(
00096 TLive _live_,
00097 TLbrace _lbrace_,
00098 TId _first_,
00099 XPLivevar _rest_,
00100 TRbrace _rbrace_)
00101 {
00102 setLive(_live_);
00103
00104 setLbrace(_lbrace_);
00105
00106 setFirst(_first_);
00107
00108 if(_rest_ != null)
00109 {
00110 while(_rest_ instanceof X1PLivevar)
00111 {
00112 this._rest_.addFirst(((X1PLivevar) _rest_).getPLivevar());
00113 _rest_ = ((X1PLivevar) _rest_).getXPLivevar();
00114 }
00115 this._rest_.addFirst(((X2PLivevar) _rest_).getPLivevar());
00116 }
00117
00118 setRbrace(_rbrace_);
00119
00120 }
00121 public void apply(Switch sw)
00122 {
00123 ((Analysis) sw).caseANonemptyLiveset(this);
00124 }
00125 public Object clone()
00126 {
00127 return new ANonemptyLiveset(
00128 (TLive) cloneNode(_live_),
00129 (TLbrace) cloneNode(_lbrace_),
00130 (TId) cloneNode(_first_),
00131 cloneList(_rest_),
00132 (TRbrace) cloneNode(_rbrace_));
00133 }
00134 public TId getFirst()
00135 {
00136 return _first_;
00137 }
00138 public TLbrace getLbrace()
00139 {
00140 return _lbrace_;
00141 }
00142 public TLive getLive()
00143 {
00144 return _live_;
00145 }
00146 public TRbrace getRbrace()
00147 {
00148 return _rbrace_;
00149 }
00150 public LinkedList getRest()
00151 {
00152 return _rest_;
00153 }
00154 void removeChild(Node child)
00155 {
00156 if(_live_ == child)
00157 {
00158 _live_ = null;
00159 return;
00160 }
00161
00162 if(_lbrace_ == child)
00163 {
00164 _lbrace_ = null;
00165 return;
00166 }
00167
00168 if(_first_ == child)
00169 {
00170 _first_ = null;
00171 return;
00172 }
00173
00174 if(_rest_.remove(child))
00175 {
00176 return;
00177 }
00178
00179 if(_rbrace_ == child)
00180 {
00181 _rbrace_ = null;
00182 return;
00183 }
00184
00185 }
00186 void replaceChild(Node oldChild, Node newChild)
00187 {
00188 if(_live_ == oldChild)
00189 {
00190 setLive((TLive) newChild);
00191 return;
00192 }
00193
00194 if(_lbrace_ == oldChild)
00195 {
00196 setLbrace((TLbrace) newChild);
00197 return;
00198 }
00199
00200 if(_first_ == oldChild)
00201 {
00202 setFirst((TId) newChild);
00203 return;
00204 }
00205
00206 for(ListIterator i = _rest_.listIterator(); i.hasNext();)
00207 {
00208 if(i.next() == oldChild)
00209 {
00210 if(newChild != null)
00211 {
00212 i.set(newChild);
00213 oldChild.parent(null);
00214 return;
00215 }
00216
00217 i.remove();
00218 oldChild.parent(null);
00219 return;
00220 }
00221 }
00222
00223 if(_rbrace_ == oldChild)
00224 {
00225 setRbrace((TRbrace) newChild);
00226 return;
00227 }
00228
00229 }
00230 public void setFirst(TId node)
00231 {
00232 if(_first_ != null)
00233 {
00234 _first_.parent(null);
00235 }
00236
00237 if(node != null)
00238 {
00239 if(node.parent() != null)
00240 {
00241 node.parent().removeChild(node);
00242 }
00243
00244 node.parent(this);
00245 }
00246
00247 _first_ = node;
00248 }
00249 public void setLbrace(TLbrace node)
00250 {
00251 if(_lbrace_ != null)
00252 {
00253 _lbrace_.parent(null);
00254 }
00255
00256 if(node != null)
00257 {
00258 if(node.parent() != null)
00259 {
00260 node.parent().removeChild(node);
00261 }
00262
00263 node.parent(this);
00264 }
00265
00266 _lbrace_ = node;
00267 }
00268 public void setLive(TLive node)
00269 {
00270 if(_live_ != null)
00271 {
00272 _live_.parent(null);
00273 }
00274
00275 if(node != null)
00276 {
00277 if(node.parent() != null)
00278 {
00279 node.parent().removeChild(node);
00280 }
00281
00282 node.parent(this);
00283 }
00284
00285 _live_ = node;
00286 }
00287 public void setRbrace(TRbrace node)
00288 {
00289 if(_rbrace_ != null)
00290 {
00291 _rbrace_.parent(null);
00292 }
00293
00294 if(node != null)
00295 {
00296 if(node.parent() != null)
00297 {
00298 node.parent().removeChild(node);
00299 }
00300
00301 node.parent(this);
00302 }
00303
00304 _rbrace_ = node;
00305 }
00306 public void setRest(List list)
00307 {
00308 Object temp[] = list.toArray();
00309 for(int i = 0; i < temp.length; i++)
00310 {
00311 _rest_.add(temp[i]);
00312 }
00313 }
00314 public String toString()
00315 {
00316 return ""
00317 + toString(_live_)
00318 + toString(_lbrace_)
00319 + toString(_first_)
00320 + toString(_rest_)
00321 + toString(_rbrace_);
00322 }
00323 }