comparison src/EDU/oswego/cs/dl/util/concurrent/SyncSortedMap.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:3dc0c5604566
1 /*
2 File: SyncSortedMap.java
3
4 Originally written by Doug Lea and released into the public domain.
5 This may be used for any purposes whatsoever without acknowledgment.
6 Thanks for the assistance and support of Sun Microsystems Labs,
7 and everyone contributing, testing, and using this code.
8
9 History:
10 Date Who What
11 1Aug1998 dl Create public version
12 */
13
14 package EDU.oswego.cs.dl.util.concurrent;
15 import java.util.*;
16
17 /**
18 * SyncSortedMaps wrap Sync-based control around java.util.SortedMaps.
19 * They support the following additional reader operations over
20 * SyncMap: comparator, subMap, headMap, tailMap, firstKey, lastKey.
21 * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>]
22 * @see SyncCollection
23 **/
24
25
26 public class SyncSortedMap extends SyncMap implements SortedMap {
27
28 /**
29 * Create a new SyncSortedMap protecting the given map,
30 * and using the given sync to control both reader and writer methods.
31 * Common, reasonable choices for the sync argument include
32 * Mutex, ReentrantLock, and Semaphores initialized to 1.
33 **/
34 public SyncSortedMap(SortedMap map, Sync sync) {
35 this (map, sync, sync);
36 }
37
38 /**
39 * Create a new SyncSortedMap protecting the given map,
40 * and using the given ReadWriteLock to control reader and writer methods.
41 **/
42 public SyncSortedMap(SortedMap map, ReadWriteLock rwl) {
43 super (map, rwl.readLock(), rwl.writeLock());
44 }
45
46 /**
47 * Create a new SyncSortedMap protecting the given map,
48 * and using the given pair of locks to control reader and writer methods.
49 **/
50 public SyncSortedMap(SortedMap map, Sync readLock, Sync writeLock) {
51 super(map, readLock, writeLock);
52 }
53
54
55 protected SortedMap baseSortedMap() {
56 return (SortedMap)c_;
57 }
58
59 public Comparator comparator() {
60 boolean wasInterrupted = beforeRead();
61 try {
62 return baseSortedMap().comparator();
63 }
64 finally {
65 afterRead(wasInterrupted);
66 }
67 }
68
69 public Object firstKey() {
70 boolean wasInterrupted = beforeRead();
71 try {
72 return baseSortedMap().firstKey();
73 }
74 finally {
75 afterRead(wasInterrupted);
76 }
77 }
78
79 public Object lastKey() {
80 boolean wasInterrupted = beforeRead();
81 try {
82 return baseSortedMap().lastKey();
83 }
84 finally {
85 afterRead(wasInterrupted);
86 }
87 }
88
89
90 public SortedMap subMap(Object fromElement, Object toElement) {
91 boolean wasInterrupted = beforeRead();
92 try {
93 return new SyncSortedMap(baseSortedMap().subMap(fromElement, toElement),
94 rd_, wr_);
95 }
96 finally {
97 afterRead(wasInterrupted);
98 }
99 }
100
101 public SortedMap headMap(Object toElement) {
102 boolean wasInterrupted = beforeRead();
103 try {
104 return new SyncSortedMap(baseSortedMap().headMap(toElement),
105 rd_, wr_);
106 }
107 finally {
108 afterRead(wasInterrupted);
109 }
110 }
111
112 public SortedMap tailMap(Object fromElement) {
113 boolean wasInterrupted = beforeRead();
114 try {
115 return new SyncSortedMap(baseSortedMap().tailMap(fromElement),
116 rd_, wr_);
117 }
118 finally {
119 afterRead(wasInterrupted);
120 }
121 }
122
123 }
124
125