checkpoint
[sbp.git] / src / edu / berkeley / sbp / Union.java
index b000f95..4de0bb4 100644 (file)
@@ -10,26 +10,24 @@ import java.lang.ref.*;
 /** an element which can produce one of several alternatives */
 public class Union extends Element implements Iterable<Sequence> {
 
+    /** display form for the Union (ie not including the RHS) */
     final String shortForm;
+
+    /** this is just a hint to use when printing out the grammar in visual form */
     final boolean synthetic;
+
+    /** the actual alternatives */
     private final List<Sequence> alternatives = new ArrayList<Sequence>();
 
     public Iterator<Sequence> iterator() { return alternatives.iterator(); }
-
-    Topology toAtom() {
-        if (alternatives.size()==0) throw new RuntimeException("cannot build an Atom from a Union with no productions");
-        Topology ret = null;
-        for(Sequence s : this) {
-            Topology a = s.toAtom();
-            if (ret==null) ret = a.dup();
-            else           ret = ret.union(a.dup());
-        }
-        if (ret==null) throw new RuntimeException("confusion on " + this);
-        return ret;
-    }
+    public boolean contains(Sequence s) { return alternatives.contains(s); }
 
     /** adds an alternative */
-    public void add(Sequence s) { alternatives.add(s); }
+    public void add(Sequence s) {
+        alternatives.add(s);
+        for(Sequence n : s.needs) add(n);
+        for(Sequence n : s.hates) add(n);
+    }
 
     /**
      *  Since every cycle in a non-degenerate grammar contains at