more changes.
[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, Set<V> set) {
17     map.put(key, set);
18   }
19
20   public void put(NTuple<T> key, NTuple<T> setKey, Set<V> set) {
21
22     if (!map.containsKey(setKey)) {
23       map.put(setKey, set);
24     }
25     map.put(key, set);
26   }
27
28   public void put(NTuple<T> key, NTuple<T> setKey, V value) {
29
30     if (setKey == null) {
31       if (map.containsKey(key)) {
32         Set<V> set = map.get(key);
33         set.add(value);
34       } else {
35         // first insert
36         Set<V> set = new HashSet<V>();
37         set.add(value);
38         map.put(key, set);
39       }
40     } else {
41       assert map.containsKey(setKey);
42       Set<V> set = map.get(setKey);
43       set.add(value);
44       map.put(key, set);
45     }
46   }
47
48   public Set<V> get(NTuple<T> key) {
49     return map.get(key);
50   }
51
52   public String toString() {
53     return map.toString();
54   }
55
56   public Hashtable<NTuple<T>, Set<V>> getMappingByStartedWith(NTuple<T> in) {
57
58     Hashtable<NTuple<T>, Set<V>> rtrMapping = new Hashtable<NTuple<T>, Set<V>>();
59
60     Set<NTuple<T>> keySet = map.keySet();
61     for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
62       NTuple<T> key = (NTuple<T>) iterator.next();
63       if (key.startsWith(in)) {
64         rtrMapping.put(key, map.get(key));
65       }
66     }
67
68     return rtrMapping;
69
70   }
71
72   public Set<NTuple<T>> keySet() {
73     return map.keySet();
74   }
75 }