aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync/src/com/koushikdutta/async/util/HashList.java
blob: 80727a9e33c413374610f8444e0c4e0849a7ac3f (plain)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.koushikdutta.async.util;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Set;

/**
 * Created by koush on 5/27/13.
 */
public class HashList<T> {
    Hashtable<String, TaggedList<T>> internal = new Hashtable<String, TaggedList<T>>();

    public HashList() {
    }

    public Set<String> keySet() {
        return internal.keySet();
    }

    public synchronized <V> V tag(String key) {
        TaggedList<T> list = internal.get(key);
        if (list == null)
            return null;
        return list.tag();
    }

    public synchronized <V> void tag(String key, V tag) {
        TaggedList<T> list = internal.get(key);
        if (list == null) {
            list = new TaggedList<T>();
            internal.put(key, list);
        }
        list.tag(tag);
    }

    public synchronized ArrayList<T> remove(String key) {
        return internal.remove(key);
    }

    public synchronized int size() {
        return internal.size();
    }

    public synchronized ArrayList<T> get(String key) {
        return internal.get(key);
    }

    synchronized public boolean contains(String key) {
        ArrayList<T> check = get(key);
        return check != null && check.size() > 0;
    }

    synchronized public void add(String key, T value) {
        ArrayList<T> ret = get(key);
        if (ret == null) {
            TaggedList<T> put = new TaggedList<T>();
            ret = put;
            internal.put(key, put);
        }
        ret.add(value);
    }

    synchronized public T pop(String key) {
        TaggedList<T> values = internal.get(key);
        if (values == null)
            return null;
        if (values.size() == 0)
            return null;
        return values.remove(values.size() - 1);
    }

    synchronized public boolean removeItem(String key, T value) {
        TaggedList<T> values = internal.get(key);
        if (values == null)
            return false;

        values.remove(value);
        return values.size() == 0;
    }
}