ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/RWMap.java
Revision: 1.8
Committed: Mon Dec 5 04:08:46 2011 UTC (12 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.7: +12 -12 lines
Log Message:
whitespace

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 */
6 import java.util.*;
7 import java.util.concurrent.*;
8 import java.util.concurrent.locks.*;
9
10
11 /**
12 * This is an incomplete implementation of a wrapper class
13 * that places read-write locks around unsynchronized Maps.
14 * Exists as a sample input for MapLoops test.
15 */
16 public class RWMap implements Map {
17 private final Map m;
18 private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
19
20 public RWMap(Map m) {
21 if (m == null)
22 throw new NullPointerException();
23 this.m = m;
24 }
25
26 public RWMap() {
27 this(new TreeMap()); // use TreeMap by default
28 // this(new IdentityHashMap());
29 }
30
31 public int size() {
32 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
33 l.lock();
34 try { return m.size(); }
35 finally { l.unlock(); }
36 }
37
38 public boolean isEmpty() {
39 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
40 l.lock();
41 try { return m.isEmpty(); }
42 finally { l.unlock(); }
43 }
44
45 public Object get(Object key) {
46 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
47 l.lock();
48 try { return m.get(key); }
49 finally { l.unlock(); }
50 }
51
52 public boolean containsKey(Object key) {
53 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
54 l.lock();
55 try { return m.containsKey(key); }
56 finally { l.unlock(); }
57 }
58
59 public boolean containsValue(Object value) {
60 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
61 l.lock();
62 try { return m.containsValue(value); }
63 finally { l.unlock(); }
64 }
65
66 public Set keySet() { // Not implemented
67 return m.keySet();
68 }
69
70 public Set entrySet() { // Not implemented
71 return m.entrySet();
72 }
73
74 public Collection values() { // Not implemented
75 return m.values();
76 }
77
78 public boolean equals(Object o) {
79 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
80 l.lock();
81 try { return m.equals(o); }
82 finally { l.unlock(); }
83 }
84
85 public int hashCode() {
86 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
87 l.lock();
88 try { return m.hashCode(); }
89 finally { l.unlock(); }
90 }
91
92 public String toString() {
93 ReentrantReadWriteLock.ReadLock l = rwl.readLock();
94 l.lock();
95 try { return m.toString(); }
96 finally { l.unlock(); }
97 }
98
99 public Object put(Object key, Object value) {
100 ReentrantReadWriteLock.WriteLock l = rwl.writeLock();
101 l.lock();
102 try { return m.put(key, value); }
103 finally { l.unlock(); }
104 }
105
106 public Object remove(Object key) {
107 ReentrantReadWriteLock.WriteLock l = rwl.writeLock();
108 l.lock();
109 try { return m.remove(key); }
110 finally { l.unlock(); }
111 }
112
113 public void putAll(Map map) {
114 ReentrantReadWriteLock.WriteLock l = rwl.writeLock();
115 l.lock();
116 try { m.putAll(map); }
117 finally { l.unlock(); }
118 }
119
120 public void clear() {
121 ReentrantReadWriteLock.WriteLock l = rwl.writeLock();
122 l.lock();
123 try { m.clear(); }
124 finally { l.unlock(); }
125 }
126
127 }