X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FUnion.java;h=9ac5e612065e9e6e2032f7dc59498fcaa2517197;hp=7274dae01ff36d1036dcaebbc99cf471e80fa315;hb=7fbee73b4dd985cb5b217ed297710c00fd9d7004;hpb=2690f6c749f117a103c57d651d89f1b4fbf1316d diff --git a/src/edu/berkeley/sbp/Union.java b/src/edu/berkeley/sbp/Union.java index 7274dae..9ac5e61 100644 --- a/src/edu/berkeley/sbp/Union.java +++ b/src/edu/berkeley/sbp/Union.java @@ -15,17 +15,17 @@ public class Union extends Element implements Iterable { private final List alternatives = new ArrayList(); public Iterator iterator() { return alternatives.iterator(); } - - void reachable(HashSet h) { for(Sequence s : alternatives) s.reachable(h); } + public boolean contains(Sequence s) { return alternatives.contains(s); } Topology toAtom() { - if (alternatives.size()==0) return null; + 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.add(a.dup()); + if (ret==null) ret = a; + else ret = ret.union(a); } + if (ret==null) throw new RuntimeException("confusion on " + this); return ret; }