X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FForest.java;h=3795c9ad19d5cdb17a2a72d9f9d1195567a82086;hp=65a80952e60321c48788a280293d9e28a084b30b;hb=815430f1fa820e28981bf4cff3fe15a4b9f5d97d;hpb=297f374e023e781f38f3fb2d6122c951f224380e diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index 65a8095..3795c9a 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -127,6 +127,11 @@ public abstract class Forest implements GraphViz.ToGraphViz { public Many() { } + public Iterator> iterator() { + touched(); + return (Iterator>)hp.iterator(); // FIXME: fastset's iterator is not safe! + } + public Tree expand1() throws Ambiguous { touched(); if (hp.size() > 1) { @@ -153,7 +158,14 @@ public abstract class Forest implements GraphViz.ToGraphViz { } private void touched() { + if (touched) return; touched = true; + FastSet> f2 = new FastSet>(); + for(Forest f : hp) + if (f instanceof Forest.One) f2.add(f); + else for(Forest ff : ((Forest.Many)f)) + f2.add(ff); + hp = f2; } public boolean contains(Forest f) { touched();