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 }