updates that were lying around but never got checked in; includes reorg of gui
[slipway.git] / src / edu / berkeley / slipway / mpar / HashMapBag.java
1 // Copyright 2006-2007 all rights reserved; see LICENSE file for BSD-style license
2
3 package edu.berkeley.slipway.mpar;
4 import java.util.*;
5
6 /** a mapping from keys of type <tt>K</tt> to <i>sets</i> of values of type <tt>T</tt> */
7 public final class HashMapBag<K,V> implements MapBag<K,V> {
8
9     private final HashMap<K,HashSet<V>> hm = new HashMap<K,HashSet<V>>();
10
11     public void add(K k, V v) {
12         HashSet<V> hs = hm.get(k);
13         if (hs==null) hm.put(k, hs = new HashSet<V>());
14         size -= hs.size();
15         hs.add(v);
16         size += hs.size();
17     }
18
19     public void addAll(K k, Iterable<V> iv) {
20         for(V v : iv) add(k, v);
21     }
22
23     public int size(K k) {
24         HashSet<V> ret = hm.get(k);
25         return ret==null ? 0 : ret.size();
26     }
27     public HashSet<V> getAll(K k) {
28         HashSet<V> ret = hm.get(k);
29         if (ret==null) return new HashSet<V>();
30         return ret;
31     }
32
33     public void remove(K k, V v) {
34         if (hm.get(k)==null) return;
35         HashSet<V> hs = hm.get(k);
36         if (hs==null) return;
37         size -= hs.size();
38         hs.remove(v);
39         size += hs.size();
40     }
41
42     public void removeAll(K k, Iterable<V> iv) {
43         for(V v : iv) remove(k, v);
44     }
45
46     public void clear() { hm.clear(); }
47
48     public boolean contains(K k, V v) {
49         return hm.get(k)!=null && hm.get(k).contains(v);
50     }
51
52     public void addAll(HashMapBag<K,V> hmb) {
53         for(K k : hmb) addAll(k, hmb.getAll(k));
54     }
55     public void removeAll(HashMapBag<K,V> hmb) {
56         for(K k : hmb) removeAll(k, hmb.getAll(k));
57     }
58
59     public Iterator<K> iterator() { return hm.keySet().iterator(); }
60     public int size() { return size; }
61     private int size = 0;
62 }