Javolution 6.0.0 java
SharedCollectionImpl.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.collection;
10 
11 import java.util.Collection;
12 import java.util.Iterator;
13 
17 
21 public class SharedCollectionImpl<E> extends CollectionView<E> {
22 
24  private class IteratorImpl implements Iterator<E> { // Thread-Safe.
25  private E next;
26  private final Iterator<E> targetIterator;
27 
28  public IteratorImpl() {
29  lock.readLock.lock();
30  try {
31  targetIterator = cloneTarget().iterator(); // Copy.
32  } finally {
34  }
35  }
36 
37  @Override
38  public boolean hasNext() {
39  return targetIterator.hasNext();
40  }
41 
42  @Override
43  public E next() {
44  next = targetIterator.next();
45  return next;
46  }
47 
48  @Override
49  public void remove() {
50  if (next == null) throw new IllegalStateException();
52  next = null;
53  }
54  }
55 
56  private static final long serialVersionUID = 0x600L; // Version.
58 
60  this(target, new ReadWriteLockImpl());
61  }
62 
65  super(target);
66  this.lock = lock;
67  }
68 
69  @Override
70  public boolean add(E element) {
72  try {
73  return target().add(element);
74  } finally {
76  }
77  }
78 
79  @Override
80  public boolean addAll(Collection<? extends E> c) {
82  try {
83  return target().addAll(c);
84  } finally {
86  }
87  }
88 
89  @Override
90  public void clear() {
92  try {
93  target().clear();
94  } finally {
96  }
97  }
98 
99  @Override
101  lock.readLock.lock();
102  try {
104  .clone();
105  copy.lock = new ReadWriteLockImpl(); // No need to share the same lock.
106  return copy;
107  } finally {
108  lock.readLock.unlock();
109  }
110  }
111 
112  @Override
114  return target().comparator();
115  }
116 
117  @Override
118  public boolean contains(Object o) {
119  lock.readLock.lock();
120  try {
121  return target().contains(o);
122  } finally {
123  lock.readLock.unlock();
124  }
125  }
126 
127  @Override
128  public boolean containsAll(Collection<?> c) {
129  lock.readLock.lock();
130  try {
131  return target().containsAll(c);
132  } finally {
133  lock.readLock.unlock();
134  }
135  }
136 
137  @Override
138  public boolean equals(Object o) {
139  lock.readLock.lock();
140  try {
141  return target().equals(o);
142  } finally {
143  lock.readLock.unlock();
144  }
145  }
146 
147  @Override
148  public int hashCode() {
149  lock.readLock.lock();
150  try {
151  return target().hashCode();
152  } finally {
153  lock.readLock.unlock();
154  }
155  }
156 
157  @Override
158  public boolean isEmpty() {
159  lock.readLock.lock();
160  try {
161  return target().isEmpty();
162  } finally {
163  lock.readLock.unlock();
164  }
165  }
166 
167  @Override
168  public Iterator<E> iterator() {
169  return new IteratorImpl();
170  }
171 
172  @Override
173  public void perform(Consumer<CollectionService<E>> action,
174  CollectionService<E> view) {
175  lock.readLock.lock();
176  try {
177  target().perform(action, view);
178  } finally {
179  lock.readLock.unlock();
180  }
181  }
182 
183  @Override
184  public boolean remove(Object o) {
185  lock.writeLock.lock();
186  try {
187  return target().remove(o);
188  } finally {
190  }
191  }
192 
193  @Override
194  public boolean removeAll(Collection<?> c) {
195  lock.writeLock.lock();
196  try {
197  return target().removeAll(c);
198  } finally {
200  }
201  }
202 
203  @Override
204  public boolean retainAll(Collection<?> c) {
205  lock.writeLock.lock();
206  try {
207  return target().retainAll(c);
208  } finally {
210  }
211  }
212 
213  @Override
214  public int size() {
215  lock.readLock.lock();
216  try {
217  return target().size();
218  } finally {
219  lock.readLock.unlock();
220  }
221  }
222 
223  @SuppressWarnings("unchecked")
224  @Override
225  public CollectionService<E>[] split(int n) { // Shares the same locks.
226  CollectionService<E>[] tmp;
227  lock.readLock.lock();
228  try {
229  tmp = target().split(n);
230  } finally {
231  lock.readLock.unlock();
232  }
233  CollectionService<E>[] result = new CollectionService[tmp.length];
234  for (int i = 0; i < tmp.length; i++) {
235  result[i] = new SharedCollectionImpl<E>(tmp[i], lock);
236  }
237  return result;
238  }
239 
240  @Override
242  return this;
243  }
244 
245  @Override
246  public Object[] toArray() {
247  lock.readLock.lock();
248  try {
249  return target().toArray();
250  } finally {
251  lock.readLock.unlock();
252  }
253  }
254 
255  @Override
256  public <T> T[] toArray(T[] a) {
257  lock.readLock.lock();
258  try {
259  return target().toArray(a);
260  } finally {
261  lock.readLock.unlock();
262  }
263  }
264 
267  try {
268  return target().clone();
269  } catch (CloneNotSupportedException e) {
270  throw new Error("Cannot happen since target is Cloneable.");
271  }
272  }
273 
274 }
javolution.util.internal.collection.SharedCollectionImpl.serialVersionUID
static final long serialVersionUID
Definition: SharedCollectionImpl.java:56
javolution.util.internal.collection.SharedCollectionImpl.hashCode
int hashCode()
Definition: SharedCollectionImpl.java:148
javolution.util.internal.collection.SharedCollectionImpl.threadSafe
CollectionService< E > threadSafe()
Definition: SharedCollectionImpl.java:241
javolution
javolution.util.internal.collection.SharedCollectionImpl.IteratorImpl.next
E next()
Definition: SharedCollectionImpl.java:43
javolution.util.service
Definition: BitSetService.java:9
javolution.util.internal.collection.CollectionView
Definition: CollectionView.java:29
javolution.util.internal.collection.SharedCollectionImpl.addAll
boolean addAll(Collection<? extends E > c)
Definition: SharedCollectionImpl.java:80
javolution.util.internal.collection.ReadWriteLockImpl.writeLock
final WriteLock writeLock
Definition: ReadWriteLockImpl.java:124
javolution.util.internal.collection.SharedCollectionImpl.perform
void perform(Consumer< CollectionService< E >> action, CollectionService< E > view)
Definition: SharedCollectionImpl.java:173
javolution.util.internal.collection.SharedCollectionImpl.comparator
Equality<? super E > comparator()
Definition: SharedCollectionImpl.java:113
javolution.util.internal.collection.SharedCollectionImpl.remove
boolean remove(Object o)
Definition: SharedCollectionImpl.java:184
javolution.util.internal.collection.SharedCollectionImpl.toArray
Object[] toArray()
Definition: SharedCollectionImpl.java:246
javolution.util.internal.collection.SharedCollectionImpl.IteratorImpl.targetIterator
final Iterator< E > targetIterator
Definition: SharedCollectionImpl.java:26
javolution.util.internal.collection.SharedCollectionImpl.removeAll
boolean removeAll(Collection<?> c)
Definition: SharedCollectionImpl.java:194
javolution.util.function.Consumer
Definition: Consumer.java:22
javolution.util.internal.collection.ReadWriteLockImpl.readLock
final ReadLock readLock
Definition: ReadWriteLockImpl.java:123
javolution.util.internal.collection.SharedCollectionImpl.clone
SharedCollectionImpl< E > clone()
Definition: SharedCollectionImpl.java:100
javolution.util.internal.collection.SharedCollectionImpl
Definition: SharedCollectionImpl.java:21
javolution.util.internal.collection.SharedCollectionImpl.equals
boolean equals(Object o)
Definition: SharedCollectionImpl.java:138
javolution.util.internal.collection.SharedCollectionImpl.isEmpty
boolean isEmpty()
Definition: SharedCollectionImpl.java:158
javolution.util.internal.collection.SharedCollectionImpl.iterator
Iterator< E > iterator()
Definition: SharedCollectionImpl.java:168
javolution.util.internal.collection.SharedCollectionImpl.clear
void clear()
Definition: SharedCollectionImpl.java:90
javolution.util.service.CollectionService
Definition: CollectionService.java:25
javolution.util.internal.collection.SharedCollectionImpl.containsAll
boolean containsAll(Collection<?> c)
Definition: SharedCollectionImpl.java:128
javolution.util.internal.collection.SharedCollectionImpl.SharedCollectionImpl
SharedCollectionImpl(CollectionService< E > target, ReadWriteLockImpl lock)
Definition: SharedCollectionImpl.java:63
javolution.util.internal.collection.SharedCollectionImpl.IteratorImpl.hasNext
boolean hasNext()
Definition: SharedCollectionImpl.java:38
javolution.util.function.Equality
Definition: Equality.java:39
javolution.util.internal.collection.SharedCollectionImpl.IteratorImpl.next
E next
Definition: SharedCollectionImpl.java:25
javolution.util.internal.collection.CollectionView.target
CollectionService< E > target
Definition: CollectionView.java:33
javolution.util.internal.collection.ReadWriteLockImpl
Definition: ReadWriteLockImpl.java:23
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.unlock
void unlock()
Definition: ReadWriteLockImpl.java:114
javolution.util.function
Definition: Consumer.java:9
javolution.util.internal.collection.SharedCollectionImpl.IteratorImpl
Definition: SharedCollectionImpl.java:24
javolution.util.internal.collection.SharedCollectionImpl.cloneTarget
CollectionService< E > cloneTarget()
Definition: SharedCollectionImpl.java:266
javolution.util.internal.collection.SharedCollectionImpl.IteratorImpl.IteratorImpl
IteratorImpl()
Definition: SharedCollectionImpl.java:28
javolution.util.internal.collection.SharedCollectionImpl.size
int size()
Definition: SharedCollectionImpl.java:214
javolution.util.internal.collection.SharedCollectionImpl.split
CollectionService< E >[] split(int n)
Definition: SharedCollectionImpl.java:225
javolution.util.internal.collection.SharedCollectionImpl.add
boolean add(E element)
Definition: SharedCollectionImpl.java:70
javolution.util.internal.collection.SharedCollectionImpl.toArray
public< T > T[] toArray(T[] a)
Definition: SharedCollectionImpl.java:256
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.lock
void lock()
Definition: ReadWriteLockImpl.java:30
javolution.util.internal.collection.SharedCollectionImpl.lock
ReadWriteLockImpl lock
Definition: SharedCollectionImpl.java:57
javolution.util.internal.collection.ReadWriteLockImpl.WriteLock.lock
void lock()
Definition: ReadWriteLockImpl.java:79
javolution.util.internal.collection.SharedCollectionImpl.contains
boolean contains(Object o)
Definition: SharedCollectionImpl.java:118
javolution.util.internal.collection.ReadWriteLockImpl.ReadLock.unlock
void unlock()
Definition: ReadWriteLockImpl.java:64
javolution.util.internal.collection.SharedCollectionImpl.SharedCollectionImpl
SharedCollectionImpl(CollectionService< E > target)
Definition: SharedCollectionImpl.java:59
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.collection.SharedCollectionImpl.retainAll
boolean retainAll(Collection<?> c)
Definition: SharedCollectionImpl.java:204