import edu.berkeley.sbp.Sequence.Pos;
import java.util.*;
-final class Result implements GraphViz.ToGraphViz {
+final class Result
+ implements GraphViz.ToGraphViz {
private Forest.Many f = new Forest.Many();
- //private HashSet<Node> predecessors = new HashSet<Node>();
- //private HashSet<Node> successors = new HashSet<Node>();
- private FastSet<Node> predecessors = new FastSet<Node>();
- private FastSet<Node> successors = new FastSet<Node>();
+ //private HashSet<StateNode> predecessors = new HashSet<StateNode>();
+ //private HashSet<StateNode> successors = new HashSet<StateNode>();
+ private FastSet<StateNode> predecessors = new FastSet<StateNode>();
+ private FastSet<StateNode> successors = new FastSet<StateNode>();
private boolean destroyed = false;
private boolean primordeal;
private int usedByNonDoomedNode = 0;
private Pos reduction;
private GSS.Phase predPhase;
- public boolean predecessorsContains(Node n) {
+ public boolean predecessorsContains(StateNode n) {
return predecessors.contains(n);
}
public Pos reduction() { return reduction; }
public GSS.Phase phase() { return predPhase; }
public Forest getForest() { return f; }
- public Iterable<Node> getPreds() { return predecessors; }
- public void addSucc(Node succ) {
+ public Iterable<StateNode> getPreds() { return predecessors; }
+ public void addSucc(StateNode succ) {
if (successors.contains(succ)) return;
successors.add(succ);
usedByNonDoomedNode += succ.state().doomed ? 0 : 1;
if (predecessors.size() > 1) throw new Error();
}
- public void removeSucc(Node succ) {
+ public void removeSucc(StateNode succ) {
if (!successors.contains(succ)) return;
successors.remove(succ);
usedByNonDoomedNode -= succ.state().doomed ? 0 : 1;
if (primordeal) return; // never destroy the "primordeal" result
destroyed = true;
while(predecessors.size() > 0)
- for(Node pred : predecessors) {
+ for(StateNode pred : predecessors) {
removePred(pred);
pred.removeSucc(this);
break;
}
predecessors = null;
while(successors.size() > 0)
- for(Node succ : successors) {
+ for(StateNode succ : successors) {
removeSucc(succ);
succ.removeResult(this);
break;
successors = null;
}
- public void removePred(Node pred) {
+ public void removePred(StateNode pred) {
if (!predecessors.contains(pred)) return;
predecessors.remove(pred);
check();
}
- public void addPred(Node pred) {
+ public void addPred(StateNode pred) {
if (predPhase==null) predPhase = pred.phase();
if (predPhase != pred.phase()) throw new Error();
predecessors.add(pred);
this(null, null, null);
this.primordeal = true;
}
- public Result(Forest f, Pos reduction, Node pred) {
+ public Result(Forest f, Pos reduction, StateNode pred) {
this.f.merge(f);
this.reduction = reduction;
if (pred != null) addPred(pred);
// GraphViz //////////////////////////////////////////////////////////////////////////////
- public GraphViz.Node toGraphViz(GraphViz gv) {
+ public GraphViz.StateNode toGraphViz(GraphViz gv) {
if (gv.hasNode(this)) return gv.createNode(this);
- GraphViz.Node n = gv.createNode(this);
+ GraphViz.StateNode n = gv.createNode(this);
n.label = ""+f;
n.shape = "rectangle";
//if (pred()!=null) n.edge(pred, "");