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 APredicates extends PPredicates
00040 {
00041 private TPredicates _predicates_;
00042 private final LinkedList _predicate_ = new TypedLinkedList(new Predicate_Cast());
00043
00044 private class Predicate_Cast implements Cast
00045 {
00046 public Object cast(Object o)
00047 {
00048 PPredicate node = (PPredicate) o;
00049
00050 if((node.parent() != null) &&
00051 (node.parent() != APredicates.this))
00052 {
00053 node.parent().removeChild(node);
00054 }
00055
00056 if((node.parent() == null) ||
00057 (node.parent() != APredicates.this))
00058 {
00059 node.parent(APredicates.this);
00060 }
00061
00062 return node;
00063 }
00064 }
00065 public APredicates()
00066 {
00067 }
00068 public APredicates(
00069 TPredicates _predicates_,
00070 List _predicate_)
00071 {
00072 setPredicates(_predicates_);
00073
00074 {
00075 Object temp[] = _predicate_.toArray();
00076 for(int i = 0; i < temp.length; i++)
00077 {
00078 this._predicate_.add(temp[i]);
00079 }
00080 }
00081
00082 }
00083 public APredicates(
00084 TPredicates _predicates_,
00085 XPPredicate _predicate_)
00086 {
00087 setPredicates(_predicates_);
00088
00089 if(_predicate_ != null)
00090 {
00091 while(_predicate_ instanceof X1PPredicate)
00092 {
00093 this._predicate_.addFirst(((X1PPredicate) _predicate_).getPPredicate());
00094 _predicate_ = ((X1PPredicate) _predicate_).getXPPredicate();
00095 }
00096 this._predicate_.addFirst(((X2PPredicate) _predicate_).getPPredicate());
00097 }
00098
00099 }
00100 public void apply(Switch sw)
00101 {
00102 ((Analysis) sw).caseAPredicates(this);
00103 }
00104 public Object clone()
00105 {
00106 return new APredicates(
00107 (TPredicates) cloneNode(_predicates_),
00108 cloneList(_predicate_));
00109 }
00110 public LinkedList getPredicate()
00111 {
00112 return _predicate_;
00113 }
00114 public TPredicates getPredicates()
00115 {
00116 return _predicates_;
00117 }
00118 void removeChild(Node child)
00119 {
00120 if(_predicates_ == child)
00121 {
00122 _predicates_ = null;
00123 return;
00124 }
00125
00126 if(_predicate_.remove(child))
00127 {
00128 return;
00129 }
00130
00131 }
00132 void replaceChild(Node oldChild, Node newChild)
00133 {
00134 if(_predicates_ == oldChild)
00135 {
00136 setPredicates((TPredicates) newChild);
00137 return;
00138 }
00139
00140 for(ListIterator i = _predicate_.listIterator(); i.hasNext();)
00141 {
00142 if(i.next() == oldChild)
00143 {
00144 if(newChild != null)
00145 {
00146 i.set(newChild);
00147 oldChild.parent(null);
00148 return;
00149 }
00150
00151 i.remove();
00152 oldChild.parent(null);
00153 return;
00154 }
00155 }
00156
00157 }
00158 public void setPredicate(List list)
00159 {
00160 Object temp[] = list.toArray();
00161 for(int i = 0; i < temp.length; i++)
00162 {
00163 _predicate_.add(temp[i]);
00164 }
00165 }
00166 public void setPredicates(TPredicates node)
00167 {
00168 if(_predicates_ != null)
00169 {
00170 _predicates_.parent(null);
00171 }
00172
00173 if(node != null)
00174 {
00175 if(node.parent() != null)
00176 {
00177 node.parent().removeChild(node);
00178 }
00179
00180 node.parent(this);
00181 }
00182
00183 _predicates_ = node;
00184 }
00185 public String toString()
00186 {
00187 return ""
00188 + toString(_predicates_)
00189 + toString(_predicate_);
00190 }
00191 }