68135da20a17e2493ac2eae9923c79976121787a
[IRC.git] / Robust / src / Analysis / SSJava / MultiSourceMap.java
1 package Analysis.SSJava;
2
3 import java.util.HashSet;
4 import java.util.Hashtable;
5 import java.util.Iterator;
6 import java.util.Set;
7
8 public class MultiSourceMap<T, V> {
9
10   Hashtable<NTuple<T>, Set<V>> map;
11
12   public MultiSourceMap() {
13     map = new Hashtable<NTuple<T>, Set<V>>();
14   }
15
16   public void put(NTuple<T> key, NTuple<T> setKey, Set<V> set) {
17
18     if (!map.containsKey(setKey)) {
19       map.put(setKey, set);
20     }
21     map.put(key, set);
22   }
23
24   public void put(NTuple<T> key, NTuple<T> setKey, V value) {
25
26     if (setKey == null) {
27       if (map.containsKey(key)) {
28         Set<V> set = map.get(key);
29         set.add(value);
30       } else {
31         // first insert
32         Set<V> set = new HashSet<V>();
33         set.add(value);
34         map.put(key, set);
35       }
36     } else {
37       assert map.containsKey(setKey);
38       Set<V> set = map.get(setKey);
39       set.add(value);
40       map.put(key, set);
41     }
42   }
43
44   public Set<V> get(NTuple<T> key) {
45     return map.get(key);
46   }
47
48   public String toString() {
49     return map.toString();
50   }
51
52   public Hashtable<NTuple<T>, Set<V>> getMappingByStartedWith(NTuple<T> in) {
53
54     Hashtable<NTuple<T>, Set<V>> rtrMapping = new Hashtable<NTuple<T>, Set<V>>();
55
56     Set<NTuple<T>> keySet = map.keySet();
57     for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
58       NTuple<T> key = (NTuple<T>) iterator.next();
59       if (key.startsWith(in)) {
60         rtrMapping.put(key, map.get(key));
61       }
62     }
63
64     return rtrMapping;
65
66   }
67 }