~ubuntu-branches/ubuntu/wily/gs-collections/wily

« back to all changes in this revision

Viewing changes to collections/src/main/java/com/gs/collections/impl/multimap/AbstractSynchronizedPutMultimap.java

  • Committer: Package Import Robot
  • Author(s): Emmanuel Bourg
  • Date: 2015-07-23 12:42:30 UTC
  • Revision ID: package-import@ubuntu.com-20150723124230-2rjvfv6elyn2m7d4
Tags: upstream-5.1.0
ImportĀ upstreamĀ versionĀ 5.1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2011 Goldman Sachs.
 
3
 *
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * You may obtain a copy of the License at
 
7
 *
 
8
 *     http://www.apache.org/licenses/LICENSE-2.0
 
9
 *
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS IS" BASIS,
 
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
package com.gs.collections.impl.multimap;
 
18
 
 
19
import java.util.concurrent.atomic.AtomicInteger;
 
20
 
 
21
import com.gs.collections.api.collection.MutableCollection;
 
22
import com.gs.collections.api.map.MutableMap;
 
23
import com.gs.collections.impl.map.mutable.ConcurrentHashMap;
 
24
 
 
25
public abstract class AbstractSynchronizedPutMultimap<K, V, C extends MutableCollection<V>> extends AbstractMutableMultimap<K, V, C>
 
26
{
 
27
    private final AtomicInteger atomicTotalSize = new AtomicInteger(0);
 
28
 
 
29
    protected AbstractSynchronizedPutMultimap()
 
30
    {
 
31
    }
 
32
 
 
33
    protected AbstractSynchronizedPutMultimap(MutableMap<K, C> newMap)
 
34
    {
 
35
        super(newMap);
 
36
    }
 
37
 
 
38
    @Override
 
39
    protected MutableMap<K, C> createMap()
 
40
    {
 
41
        return ConcurrentHashMap.newMap();
 
42
    }
 
43
 
 
44
    @Override
 
45
    protected MutableMap<K, C> createMapWithKeyCount(int keyCount)
 
46
    {
 
47
        return ConcurrentHashMap.newMap(keyCount);
 
48
    }
 
49
 
 
50
    @Override
 
51
    public int size()
 
52
    {
 
53
        return this.atomicTotalSize.get();
 
54
    }
 
55
 
 
56
    @Override
 
57
    protected void incrementTotalSize()
 
58
    {
 
59
        this.atomicTotalSize.incrementAndGet();
 
60
    }
 
61
 
 
62
    @Override
 
63
    protected void decrementTotalSize()
 
64
    {
 
65
        this.atomicTotalSize.decrementAndGet();
 
66
    }
 
67
 
 
68
    @Override
 
69
    protected void addToTotalSize(int value)
 
70
    {
 
71
        this.atomicTotalSize.addAndGet(value);
 
72
    }
 
73
 
 
74
    @Override
 
75
    protected void subtractFromTotalSize(int value)
 
76
    {
 
77
        this.atomicTotalSize.addAndGet(-value);
 
78
    }
 
79
 
 
80
    @Override
 
81
    protected void clearTotalSize()
 
82
    {
 
83
        this.atomicTotalSize.set(0);
 
84
    }
 
85
 
 
86
    @Override
 
87
    public boolean put(K key, V value)
 
88
    {
 
89
        MutableCollection<V> collection = this.getIfAbsentPutCollection(key);
 
90
        synchronized (collection)
 
91
        {
 
92
            if (collection.add(value))
 
93
            {
 
94
                this.incrementTotalSize();
 
95
                return true;
 
96
            }
 
97
            return false;
 
98
        }
 
99
    }
 
100
 
 
101
    private C getIfAbsentPutCollection(K key)
 
102
    {
 
103
        return this.map.getIfAbsentPutWith(key, this.createCollectionBlock(), this);
 
104
    }
 
105
}