changes
[IRC.git] / Robust / src / IR / Flat / FlatNode.java
1 package IR.Flat;
2 import java.util.Vector;
3
4 public class FlatNode {
5   protected Vector next;
6   protected Vector prev;
7
8   public FlatNode() {
9     next=new Vector();
10     prev=new Vector();
11   }
12
13   public String toString() {
14     throw new Error(this.getClass().getName() + "does not implement toString!");
15   }
16   public int numNext() {
17     return next.size();
18   }
19   public FlatNode getNext(int i) {
20     return (FlatNode) next.get(i);
21   }
22
23   public int numPrev() {
24     return prev.size();
25   }
26   public FlatNode getPrev(int i) {
27     return (FlatNode) prev.get(i);
28   }
29   public void addNext(FlatNode n) {
30     next.add(n);
31     n.addPrev(this);
32   }
33   public void removePrev(FlatNode n) {
34     prev.remove(n);
35   }
36   /** This function modifies the graph */
37   public void setNext(int i, FlatNode n) {
38     FlatNode old=getNext(i);
39     next.set(i, n);
40     old.prev.remove(this);
41     n.addPrev(this);
42   }
43   /** This function modifies the graph */
44   public void setprev(int i, FlatNode n) {
45     prev.set(i, n);
46   }
47   /** This function modifies the graph */
48   public void setnext(int i, FlatNode n) {
49     next.set(i, n);
50   }
51   public void addPrev(FlatNode p) {
52     prev.add(p);
53   }
54   public int kind() {
55     throw new Error();
56   }
57   public TempDescriptor [] readsTemps() {
58     return new TempDescriptor[0];
59   }
60   public TempDescriptor [] writesTemps() {
61     return new TempDescriptor[0];
62   }
63   public FlatNode clone(TempMap t) {
64     throw new Error();
65   }
66
67   public void rewriteUse(TempMap t) {
68     System.out.println(toString());
69     throw new Error();
70   }
71
72   public void rewriteDef(TempMap t) {
73     System.out.println(toString());
74     throw new Error();
75   }
76
77   public void replace(FlatNode fnnew) {
78     fnnew.prev.setSize(prev.size());
79     fnnew.next.setSize(next.size());
80     for(int i=0;i<prev.size();i++) {
81       FlatNode nprev=(FlatNode)prev.get(i);
82       fnnew.prev.set(i,nprev);
83       for(int j=0;j<nprev.numNext();j++) {
84         FlatNode n=nprev.getNext(j);
85         if (n==this)
86           nprev.next.set(j, fnnew);
87       }
88     }
89     for(int i=0;i<next.size();i++) {
90       FlatNode nnext=(FlatNode)next.get(i);
91       fnnew.next.set(i,nnext);;
92       for(int j=0;j<nnext.numPrev();j++) {
93         FlatNode n=nnext.getPrev(j);
94         if (n==this)
95           nnext.prev.set(j, fnnew);
96       }
97     }
98   }
99 }