X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FTopologicalBag.java;h=b034bafe12adc3cfc98f2d00b98ab38d217b7747;hb=61566402d83d5c06d57fb850e60ca0f82c27b9a2;hp=8862be6e82ea6ec9e443456894ae43788aab9400;hpb=6b53048f4413f3c618acc3581d0b4f60a236a9bc;p=sbp.git
diff --git a/src/edu/berkeley/sbp/util/TopologicalBag.java b/src/edu/berkeley/sbp/util/TopologicalBag.java
index 8862be6..b034baf 100644
--- a/src/edu/berkeley/sbp/util/TopologicalBag.java
+++ b/src/edu/berkeley/sbp/util/TopologicalBag.java
@@ -1,3 +1,5 @@
+// Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
+
package edu.berkeley.sbp.util;
import edu.berkeley.sbp.util.*;
import edu.berkeley.sbp.*;
@@ -12,7 +14,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, Serializable {
// CRUCIAL INVARIANT: keys in this hashmap MUST be disjoint or the universe will implode
private final HashMap,HashSet> h = new HashMap,HashSet>();
@@ -82,7 +84,7 @@ public class TopologicalBag implements MapBag,V> {
return true;
}
- public boolean contains(K k) { return get(k).iterator().hasNext(); }
+ public boolean contains(K k) { return has(k); }
public boolean contains(K k, V v) {
for(Topology t : h.keySet())
@@ -91,8 +93,23 @@ public class TopologicalBag implements MapBag,V> {
return false;
}
+ public boolean has(K k) {
+ for(Topology t : h.keySet())
+ if (t.contains(k) && !h.get(t).isEmpty())
+ return true;
+ return false;
+ }
+
private HashMap> cache = new HashMap>();
public Iterable getAll(Topology k) { return h.get(k); }
+
+ public void invoke(K k, Invokable ivbc, B b) {
+ for(Topology t : h.keySet())
+ if (t.contains(k))
+ for(V v : h.get(t))
+ ivbc.invoke(v, b);
+ }
+
public Iterable get(K k) {
Iterable c = cache.get(k);
if (c != null) return c;
@@ -119,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