1 cananian 1.1.2.2 package harpoon.Backend.CSAHack.Graph;
 2 cananian 1.1.2.1 
 3 cananian 1.1.2.1 public class Node {
 4 cananian 1.1.2.1 
 5 cananian 1.1.2.1     Graph mygraph;
 6 cananian 1.1.2.1     private Node(){}
 7 cananian 1.1.2.1     int mykey;
 8 cananian 1.1.2.1     public Node(Graph g) {
 9 cananian 1.1.2.1         mygraph=g; 
10 cananian 1.1.2.1         mykey= g.nodecount++;
11 cananian 1.1.2.1         NodeList p = new NodeList(this, null);
12 cananian 1.1.2.1         if (g.mylast==null)
13 cananian 1.1.2.1            g.mynodes=g.mylast=p;
14 cananian 1.1.2.1         else g.mylast = g.mylast.tail = p;
15 cananian 1.1.2.1     }
16 cananian 1.1.2.1 
17 cananian 1.1.2.1     NodeList succs;
18 cananian 1.1.2.1     NodeList preds;
19 cananian 1.1.2.1     public NodeList succ() {return succs;}
20 cananian 1.1.2.1     public NodeList pred() {return preds;}
21 cananian 1.1.2.1       NodeList cat(NodeList a, NodeList b) {
22 cananian 1.1.2.1           if (a==null) return b;
23 cananian 1.1.2.1           else return new NodeList(a.head, cat(a.tail,b));
24 cananian 1.1.2.1     }
25 cananian 1.1.2.1     public NodeList adj() {return cat(succ(), pred());}
26 cananian 1.1.2.1 
27 cananian 1.1.2.1     int len(NodeList l) {
28 cananian 1.1.2.1         int i=0;
29 cananian 1.1.2.1         for(NodeList p=l; p!=null; p=p.tail) i++;
30 cananian 1.1.2.1         return i;
31 cananian 1.1.2.1     }
32 cananian 1.1.2.1 
33 cananian 1.1.2.1     public int inDegree() {return len(pred());}
34 cananian 1.1.2.1     public int outDegree() {return len(succ());}
35 cananian 1.1.2.1     public int degree() {return inDegree()+outDegree();} 
36 cananian 1.1.2.1 
37 cananian 1.1.2.1     public boolean goesTo(Node n) {
38 cananian 1.1.2.1         return Graph.inList(n, succ());
39 cananian 1.1.2.1     }
40 cananian 1.1.2.1 
41 cananian 1.1.2.1     public boolean comesFrom(Node n) {
42 cananian 1.1.2.1         return Graph.inList(n, pred());
43 cananian 1.1.2.1     }
44 cananian 1.1.2.1 
45 cananian 1.1.2.1     public boolean adj(Node n) {
46 cananian 1.1.2.1         return goesTo(n) || comesFrom(n);
47 cananian 1.1.2.1     }
48 cananian 1.1.2.1 
49 cananian 1.1.2.1     public String toString() {return String.valueOf(mykey);}
50 cananian 1.1.2.1 
51 cananian 1.2     }