1168c78419ff63f58a555117096ae66a1d419c3c
[sbp.git] / src / edu / berkeley / sbp / Node.java
1 // Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
2
3 package edu.berkeley.sbp;
4 import edu.berkeley.sbp.*;
5 import edu.berkeley.sbp.util.*;
6 import edu.berkeley.sbp.Parser.Table.*;
7 import edu.berkeley.sbp.Sequence.Pos;
8 import edu.berkeley.sbp.Sequence.Pos;
9 import java.io.*;
10 import java.util.*;
11 import java.lang.reflect.*;
12
13 class Node<OtherNode extends Node>
14     implements IntegerMappable,
15                GraphViz.ToGraphViz,
16                Iterable<OtherNode> {
17
18     protected       FastSet<OtherNode> predecessors = new FastSet<OtherNode>();
19     protected       FastSet<OtherNode> successors = new FastSet<OtherNode>();
20     //private       HashSet<OtherNode> predecessors = new HashSet<OtherNode>();
21     //private       HashSet<OtherNode> successors = new HashSet<OtherNode>();
22
23     public Iterator<OtherNode> iterator() { return predecessors.iterator(); }
24
25     public boolean noSuccessors() { return successors.size()==0; }
26     public boolean predecessorsContains(OtherNode n) {
27         return predecessors.contains(n);
28     }
29
30     // GraphViz //////////////////////////////////////////////////////////////////////////////
31
32     public GraphViz.StateNode toGraphViz(GraphViz gv) {
33         if (gv.hasNode(this)) return gv.createNode(this);
34         GraphViz.StateNode n = gv.createNode(this);
35         /*
36         n.label = ""+f;
37         n.shape = "rectangle";
38         //if (pred()!=null) n.edge(pred, "");
39         n.color = "blue";
40         if (phase() != null)
41             ((GraphViz.Group)phase().toGraphViz(gv)).add(n);
42         n.label = "state["+state.toInt()+"]";
43         n.shape = "rectangle";
44         boolean haspreds = false;
45         for(ResultNode r : results) n.edge(r, "");
46         n.color = state.doomed ? "red" : "green";
47         ((GraphViz.Group)phase().toGraphViz(gv)).add(n);
48         */
49         return n;
50     }
51     public boolean isTransparent() { return false; }
52     public boolean isHidden() { return false; }
53
54     // IntegerMappable ////////////////////////////////////////////////////////////
55
56     private static int node_idx = 0;
57     private final int idx = node_idx++;
58     public int toInt() { return idx; }
59
60 }