summaryrefslogtreecommitdiff
path: root/sources/ch/epfl/lamp/util/StackedMap.java
blob: 171976d7a041ff8912283e8e150ddb4e7b172172 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package ch.epfl.lamp.util;

import java.util.*;

/**
 * A stack of hash maps.
 *
 * @author Michel Schinz
 * @version 1.0
 */

public class StackedHashMap extends AbstractMap implements Map {
    protected LinkedList/*<HashMap>*/ maps = new LinkedList();
    protected HashMap topmostMap = new HashMap();

    public void push() {
        maps.addFirst(topmostMap);
        topmostMap = new HashMap(topmostMap);
    }

    public void push(Map map) {
        push();
        topmostMap.putAll(map);
    }

    public void pop() {
        topmostMap = (HashMap)maps.removeFirst();
    }

    public Object put(Object key, Object value) {
        return topmostMap.put(key, value);
    }

    public void putAll(Object[] keys, Object[] values) {
        assert keys.length == values.length;
        for (int i = 0; i < keys.length; ++i)
            topmostMap.put(keys[i], values[i]);
    }

    public Object get(Object key) {
        return topmostMap.get(key);
    }

    public Set entrySet() {
        return topmostMap.entrySet();
    }
}