some simplifications to GSS, ResultNode, and StateNode
[sbp.git] / src / edu / berkeley / sbp / ResultNode.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.util.*;
5 import edu.berkeley.sbp.Sequence.Pos;
6 import edu.berkeley.sbp.Sequence.Pos;
7 import java.util.*;
8
9 final class ResultNode
10     extends Node<StateNode> {
11
12     private Pos reduction;
13     private Forest.Many f = new Forest.Many();
14
15     public void merge(Forest newf) { this.f.merge(newf); }
16     public Pos reduction() { return reduction; }
17     public boolean isDoomedState() { /* this is irrelevant */ return false; }
18     public Forest getForest() { return f; }
19     public String toString() { return super.toString()+"->"+phase(); }
20
21     public void check() {
22         if (destroyed) return;
23         if (successors.size()==0) destroy();
24         else if (predecessors.size()==0) destroy();
25     }
26     protected void destroy() {
27         if (destroyed) return;
28         if (predecessorPhase()==null) return;  // never destroy the "primordeal" result
29         super.destroy();
30     }
31
32     protected void addPred(StateNode pred) {
33         super.addPred(pred);
34         // results should have at most one predecessor
35         if (predecessors.size() > 1) throw new Error();
36     }
37         
38     public ResultNode() { this(null, null, null); }
39     public ResultNode(Forest f, Pos reduction, StateNode pred) {
40         super(pred==null ? null : pred.phase(),
41               pred==null ? null : pred.phase());
42         this.f.merge(f);
43         this.reduction = reduction;
44         if (pred != null) addPred(pred);
45     }
46 }