X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Futil%2FHashMapBag.java;h=73e2ccecbe2eca25d097b9b72d5af8af4fa1309c;hb=3473141880127c6aa52d094d51739e5eb67f1703;hp=5430a8f8eddbf92f4a9fd50085f1f7cd17b6c390;hpb=0a0227b9180534d2a431f3d6e08a398bde2244c4;p=sbp.git diff --git a/src/edu/berkeley/sbp/util/HashMapBag.java b/src/edu/berkeley/sbp/util/HashMapBag.java index 5430a8f..73e2cce 100644 --- a/src/edu/berkeley/sbp/util/HashMapBag.java +++ b/src/edu/berkeley/sbp/util/HashMapBag.java @@ -9,7 +9,9 @@ public final class HashMapBag implements MapBag { public void add(K k, V v) { HashSet hs = hm.get(k); if (hs==null) hm.put(k, hs = new HashSet()); + size -= hs.size(); hs.add(v); + size += hs.size(); } public void addAll(K k, Iterable iv) { @@ -22,5 +24,33 @@ public final class HashMapBag implements MapBag { return ret; } + public void remove(K k, V v) { + if (hm.get(k)==null) return; + HashSet hs = hm.get(k); + if (hs==null) return; + size -= hs.size(); + hs.remove(v); + size += hs.size(); + } + + public void removeAll(K k, Iterable iv) { + for(V v : iv) remove(k, v); + } + + public void clear() { hm.clear(); } + + public boolean contains(K k, V v) { + return hm.get(k)!=null && hm.get(k).contains(v); + } + + public void addAll(HashMapBag hmb) { + for(K k : hmb) addAll(k, hmb.getAll(k)); + } + public void removeAll(HashMapBag hmb) { + for(K k : hmb) removeAll(k, hmb.getAll(k)); + } + public Iterator iterator() { return hm.keySet().iterator(); } + public int size() { return size; } + private int size = 0; }