2 import java.util.Vector;
3 import java.util.HashSet;
5 import java.util.Iterator;
7 public class FlatNode {
10 static int idcounter=0;
11 public final int nodeid;
19 public String toString() {
20 throw new Error(this.getClass().getName() + "does not implement toString!");
22 public int numNext() {
25 public FlatNode getNext(int i) {
26 return (FlatNode) next.get(i);
29 public int numPrev() {
32 public FlatNode getPrev(int i) {
33 return (FlatNode) prev.get(i);
35 public void addNext(FlatNode n) {
40 public void removeNext(FlatNode n) {
43 public void removePrev(FlatNode n) {
47 /** This function modifies the graph */
48 public void setNext(int i, FlatNode n) {
49 FlatNode old=getNext(i);
51 old.prev.remove(this);
54 /** This function modifies the graph */
55 public void setNewNext(int i, FlatNode n) {
61 /** This function modifies the graph */
62 public void setprev(int i, FlatNode n) {
65 /** This function modifies the graph */
66 public void setnext(int i, FlatNode n) {
69 public void addPrev(FlatNode p) {
75 public TempDescriptor [] readsTemps() {
76 return new TempDescriptor[0];
78 public TempDescriptor [] writesTemps() {
79 return new TempDescriptor[0];
81 public FlatNode clone(TempMap t) {
82 throw new Error("no clone method for"+this);
85 public void rewriteUse(TempMap t) {
86 System.out.println(toString());
90 public void rewriteDef(TempMap t) {
91 System.out.println(toString());
95 public Set<FlatNode> getReachableSet(Set<FlatNode> endset) {
96 HashSet<FlatNode> tovisit=new HashSet<FlatNode>();
97 HashSet<FlatNode> visited=new HashSet<FlatNode>();
99 while(!tovisit.isEmpty()) {
100 FlatNode fn=tovisit.iterator().next();
103 if (endset!=null&&!endset.contains(fn)) {
104 for(int i=0; i<fn.numNext(); i++) {
105 FlatNode nn=fn.getNext(i);
106 if (!visited.contains(nn))
114 public void replace(FlatNode fnnew) {
115 fnnew.prev.setSize(prev.size());
116 fnnew.next.setSize(next.size());
117 for(int i=0;i<prev.size();i++) {
118 FlatNode nprev=(FlatNode)prev.get(i);
119 fnnew.prev.set(i,nprev);
120 for(int j=0;j<nprev.numNext();j++) {
121 FlatNode n=nprev.getNext(j);
123 nprev.next.set(j, fnnew);
126 for(int i=0;i<next.size();i++) {
127 FlatNode nnext=(FlatNode)next.get(i);
128 fnnew.next.set(i,nnext);
129 for(int j=0;j<nnext.numPrev();j++) {
130 FlatNode n=nnext.getPrev(j);
132 nnext.prev.set(j, fnnew);