Javolution 6.0.0 java
SharedMapImpl.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.map;
10 
11 import java.util.Iterator;
12 import java.util.Map;
13 
17 
21 public class SharedMapImpl<K, V> extends MapView<K, V> {
22 
24  private class IteratorImpl implements Iterator<Entry<K, V>> {
25  private Entry<K, V> next;
26  private final Iterator<Entry<K, V>> targetIterator;
27 
28  public IteratorImpl() {
29  lock.readLock.lock();
30  try {
31  targetIterator = cloneTarget().entrySet().iterator(); // Copy.
32  } finally {
34  }
35  }
36 
37  @Override
38  public boolean hasNext() {
39  return targetIterator.hasNext();
40  }
41 
42  @Override
43  public Entry<K, V> next() {
44  next = targetIterator.next();
45  return next;
46  }
47 
48  @Override
49  public void remove() {
50  if (next == null) throw new IllegalStateException();
51  SharedMapImpl.this.remove(next.getKey());
52  next = null;
53  }
54  }
55 
56  private static final long serialVersionUID = 0x600L; // Version.
58  protected transient Thread updatingThread; // The thread executing an update.
59 
61  this(target, new ReadWriteLockImpl());
62  }
63 
65  super(target);
66  this.lock = lock;
67  }
68 
69  @Override
70  public void clear() {
72  try {
73  target().clear();
74  } finally {
76  }
77  }
78 
79  @Override
80  public boolean containsKey(Object key) {
81  lock.readLock.lock();
82  try {
83  return target().containsKey(key);
84  } finally {
86  }
87  }
88 
89  @Override
90  public boolean containsValue(Object value) {
91  lock.readLock.lock();
92  try {
93  return target().containsValue(value);
94  } finally {
96  }
97  }
98 
99  @Override
100  public V get(Object key) {
101  lock.readLock.lock();
102  try {
103  return target().get(key);
104  } finally {
105  lock.readLock.unlock();
106  }
107  }
108 
109  @Override
110  public boolean isEmpty() {
111  lock.readLock.lock();
112  try {
113  return target().isEmpty();
114  } finally {
115  lock.readLock.unlock();
116  }
117  }
118 
119  @Override
120  public Iterator<Entry<K, V>> iterator() {
121  return new IteratorImpl();
122  }
123 
124  @Override
126  return target().keyComparator();
127  }
128 
129  @Override
130  public V put(K key, V value) {
131  lock.writeLock.lock();
132  try {
133  return target().put(key, value);
134  } finally {
136  }
137  }
138 
139  @Override
140  public void putAll(Map<? extends K, ? extends V> m) {
141  lock.writeLock.lock();
142  try {
143  target().putAll(m);
144  } finally {
146  }
147  }
148 
149  @Override
150  public V putIfAbsent(K key, V value) {
151  lock.writeLock.lock();
152  try {
153  return target().putIfAbsent(key, value);
154  } finally {
156  }
157  }
158 
159  @Override
160  public V remove(Object key) {
161  lock.writeLock.lock();
162  try {
163  return target().remove(key);
164  } finally {
166  }
167  }
168 
169  @Override
170  public boolean remove(Object key, Object value) {
171  lock.writeLock.lock();
172  try {
173  return target().remove(key, value);
174  } finally {
176  }
177  }
178 
179  @Override
180  public V replace(K key, V value) {
181  lock.writeLock.lock();
182  try {
183  return target().replace(key, value);
184  } finally {
186  }
187  }
188 
189  @Override
190  public boolean replace(K key, V oldValue, V newValue) {
191  lock.writeLock.lock();
192  try {
193  return target().replace(key, oldValue, newValue);
194  } finally {
196  }
197  }
198 
199  @Override
200  public int size() {
201  lock.readLock.lock();
202  try {
203  return target().size();
204  } finally {
205  lock.readLock.unlock();
206  }
207  }
208 
209  @SuppressWarnings("unchecked")
210  @Override
211  public MapService<K, V>[] split(int n) {
212  MapService<K, V>[] tmp;
213  lock.readLock.lock();
214  try {
215  tmp = target().split(n);
216  } finally {
217  lock.readLock.unlock();
218  }
219  MapService<K, V>[] result = new MapService[tmp.length];
220  for (int i = 0; i < tmp.length; i++) {
221  result[i] = new SharedMapImpl<K, V>(tmp[i], lock); // Same lock.
222  }
223  return result;
224  }
225 
226  @Override
228  return this;
229  }
230 
231  @Override
233  return target().valueComparator();
234  }
235 
238  try {
239  return target().clone();
240  } catch (CloneNotSupportedException e) {
241  throw new Error("Cannot happen since target is Cloneable.");
242  }
243  }
244 
245 }
javolution.util.internal.map.SharedMapImpl.threadSafe
MapService< K, V > threadSafe()
Definition: SharedMapImpl.java:227
javolution
javolution.util.internal
javolution.util.internal.map.SharedMapImpl
Definition: SharedMapImpl.java:21
javolution.util.service
Definition: BitSetService.java:9
javolution.util.internal.map.SharedMapImpl.putIfAbsent
V putIfAbsent(K key, V value)
Definition: SharedMapImpl.java:150
javolution.util.internal.collection.ReadWriteLockImpl.writeLock
final WriteLock writeLock
Definition: ReadWriteLockImpl.java:124
javolution.util.internal.map.SharedMapImpl.remove
V remove(Object key)
Definition: SharedMapImpl.java:160
javolution.util.internal.map.SharedMapImpl.valueComparator
Equality<? super V > valueComparator()
Definition: SharedMapImpl.java:232
javolution.util.internal.map.MapView
Definition: MapView.java:29
javolution.util.internal.map.SharedMapImpl.containsKey
boolean containsKey(Object key)
Definition: SharedMapImpl.java:80
javolution.util.internal.collection
Definition: AtomicCollectionImpl.java:9
javolution.util.internal.map.SharedMapImpl.SharedMapImpl
SharedMapImpl(MapService< K, V > target)
Definition: SharedMapImpl.java:60
javolution.util.internal.map.SharedMapImpl.IteratorImpl.IteratorImpl
IteratorImpl()
Definition: SharedMapImpl.java:28
javolution.util.internal.map.SharedMapImpl.putAll
void putAll(Map<? extends K, ? extends V > m)
Definition: SharedMapImpl.java:140
javolution.util.service.MapService
Definition: MapService.java:27
javolution.util.internal.collection.ReadWriteLockImpl.readLock
final ReadLock readLock
Definition: ReadWriteLockImpl.java:123
javolution.util.internal.map.SharedMapImpl.containsValue
boolean containsValue(Object value)
Definition: SharedMapImpl.java:90
javolution.util.internal.map.SharedMapImpl.replace
boolean replace(K key, V oldValue, V newValue)
Definition: SharedMapImpl.java:190
javolution.util.internal.map.SharedMapImpl.IteratorImpl.next
Entry< K, V > next
Definition: SharedMapImpl.java:25
javolution.util.internal.map.SharedMapImpl.size
int size()
Definition: SharedMapImpl.java:200
javolution.util.function.Equality
Definition: Equality.java:39
javolution.util.internal.map.SharedMapImpl.put
V put(K key, V value)
Definition: SharedMapImpl.java:130
javolution.util.internal.map.SharedMapImpl.updatingThread
transient Thread updatingThread
Definition: SharedMapImpl.java:58
javolution.util.internal.map.SharedMapImpl.SharedMapImpl
SharedMapImpl(MapService< K, V > target, ReadWriteLockImpl lock)
Definition: SharedMapImpl.java:64
javolution.util.internal.collection.ReadWriteLockImpl
Definition: ReadWriteLockImpl.java:23
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.unlock
void unlock()
Definition: ReadWriteLockImpl.java:114
javolution.util.internal.map.SharedMapImpl.iterator
Iterator< Entry< K, V > > iterator()
Definition: SharedMapImpl.java:120
javolution.util.function
Definition: Consumer.java:9
javolution.util.internal.map.SharedMapImpl.clear
void clear()
Definition: SharedMapImpl.java:70
javolution.util.internal.map.SharedMapImpl.IteratorImpl.targetIterator
final Iterator< Entry< K, V > > targetIterator
Definition: SharedMapImpl.java:26
javolution.util.internal.map.SharedMapImpl.serialVersionUID
static final long serialVersionUID
Definition: SharedMapImpl.java:56
javolution.util.internal.map.SharedMapImpl.IteratorImpl.next
Entry< K, V > next()
Definition: SharedMapImpl.java:43
javolution.util.internal.map.SharedMapImpl.keyComparator
Equality<? super K > keyComparator()
Definition: SharedMapImpl.java:125
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.lock
void lock()
Definition: ReadWriteLockImpl.java:30
javolution.util.internal.map.SharedMapImpl.replace
V replace(K key, V value)
Definition: SharedMapImpl.java:180
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.lock
void lock()
Definition: ReadWriteLockImpl.java:79
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.unlock
void unlock()
Definition: ReadWriteLockImpl.java:64
javolution.util.internal.map.SharedMapImpl.IteratorImpl
Definition: SharedMapImpl.java:24
Thread
javolution.util.internal.map.SharedMapImpl.cloneTarget
MapService< K, V > cloneTarget()
Definition: SharedMapImpl.java:237
javolution.util.internal.map.SharedMapImpl.lock
ReadWriteLockImpl lock
Definition: SharedMapImpl.java:57
javolution.util.internal.map.SharedMapImpl.IteratorImpl.hasNext
boolean hasNext()
Definition: SharedMapImpl.java:38
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.map.SharedMapImpl.split
MapService< K, V >[] split(int n)
Definition: SharedMapImpl.java:211
javolution.util.internal.map.MapView.target
MapService< K, V > target
Definition: MapView.java:213
javolution.util.internal.map.SharedMapImpl.isEmpty
boolean isEmpty()
Definition: SharedMapImpl.java:110