X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FTopologicalBag.java;h=1b2711d4a1fade2ebb6ecfb82f278a62f2afc0bd;hp=38e3925a9e6af487db128cba2d639046394d151b;hb=8c293278cc3351b872f691c0b866367747bad44a;hpb=014de68a21aa2d17fdfd0bac7e404a725997a246
diff --git a/src/edu/berkeley/sbp/util/TopologicalBag.java b/src/edu/berkeley/sbp/util/TopologicalBag.java
index 38e3925..1b2711d 100644
--- a/src/edu/berkeley/sbp/util/TopologicalBag.java
+++ b/src/edu/berkeley/sbp/util/TopologicalBag.java
@@ -12,7 +12,7 @@ import java.lang.ref.*;
//
/** a mapping from topologies over K to sets of values of type V */
-public class TopologicalBag implements MapBag,V> {
+public class TopologicalBag implements MapBag,V>, VisitableMap {
// CRUCIAL INVARIANT: keys in this hashmap MUST be disjoint or the universe will implode
private final HashMap,HashSet> h = new HashMap,HashSet>();
@@ -29,6 +29,8 @@ public class TopologicalBag implements MapBag,V> {
public void putAll(Topology k, Iterable vi) { if (vi!=null) for(V v : vi) put(k, v); }
public void put(Topology t, V v) {
+ // XXX hack
+ if (t instanceof Atom) t = ((Atom)t).underlying();
for(Topology ht : h.keySet()) {
if (t.disjoint(ht)) continue;
if (t.containsAll(ht) && ht.containsAll(t)) {
@@ -134,5 +136,47 @@ public class TopologicalBag implements MapBag,V> {
return ret;
}
}
+
+ public VisitableMap optimize(final Functor f) {
+ ArrayList min_ = new ArrayList();
+ ArrayList max_ = new ArrayList();
+ ArrayList