1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/* TODO: Reintegrate
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
// $Id$
package scala.collection.mutable
/** This class should be used as a mixin. It synchronizes the <code>Map</code>
* functions of the class into which it is mixed in.
*
* @author Matthias Zenger, Martin Odersky
* @version 2.0, 31/12/2006
*/
trait SynchronizedMap[A, B] extends Map[A, B] {
import collection.Traversable
override def mapBuilder[A, B]: Builder[(A, B), SynchronizedMap[A, B], Any] = SynchronizedMap.newBuilder[A, B]
abstract override def size: Int = synchronized {
super.size
}
abstract override def get(key: A): Option[B] = synchronized {
super.get(key)
}
override def isEmpty: Boolean = synchronized {
super.isEmpty
}
override def apply(key: A): B = synchronized {
super.apply(key)
}
override def contains(key: A): Boolean = synchronized {
super.contains(key)
}
override def isDefinedAt(key: A) = synchronized {
super.isDefinedAt(key)
}
override def keys: Iterator[A] = synchronized {
super.keys
}
override def keySet: collection.Set[A] = synchronized {
super.keySet
}
override def values: Iterator[B] = synchronized {
super.values
}
abstract override def elements: Iterator[(A, B)] = synchronized {
super.elements
}
override def toList: List[(A, B)] = synchronized {
super.toList
}
abstract override def update(key: A, value: B): Unit = synchronized {
super.update(key, value)
}
override def += (kv: (A, B)): Unit = synchronized {
super.+=(kv)
}
/** Add two or more key/value pairs to this map.
* @param kv1 the key/first value pair.
* @param kv2 the second key/first value pair.
* @param kvs the remaining key/first value pairs.
*/
override def += (kv1: (A, B), kv2: (A, B), kvs: (A, B)*): Unit = synchronized {
super.+=(kv1, kv2, kvs: _*)
}
override def ++=(map: Traversable[(A, B)]): Unit = synchronized {
super.++=(map)
}
override def ++=(it: Iterator[(A, B)]): Unit = synchronized {
super.++=(it)
}
abstract override def -=(key: A): Unit = synchronized {
super.-=(key)
}
override def -= (key1: A, key2: A, keys: A*): Unit = synchronized {
super.-=(key1, key2, keys: _*)
}
override def --=(keys: Traversable[A]): Unit = synchronized {
super.--=(keys)
}
override def --=(it: Iterator[A]): Unit = synchronized {
super.--=(it)
}
override def clear(): Unit = synchronized {
super.clear
}
/* TODO: Reintegrate
override def getOrElseUpdate(key: A, default: => B): B = synchronized {
super.getOrElseUpdate(key, default)
}
*/
override def transform(f: (A, B) => B): this.type = synchronized[this.type] {
super.transform(f)
}
override def retain(p: (A, B) => Boolean): this.type = synchronized[this.type] {
super.retain(p)
}
override def toString() = synchronized {
super.toString()
}
override def equals(that: Any): Boolean = synchronized {
super.equals(that)
}
/* TODO: Reintegrate
override def <<(cmd: Message[(A, B)]): Unit = synchronized {
super.<<(cmd)
}
*/
override def clone(): Map[A, B] = synchronized {
super.clone()
}
}
/* Factory object for `Map` class
* Currently this returns a HashMap.
*/
object SynchronizedMap extends MutableMapFactory[SynchronizedMap] {
type Coll = Map[_, _]
implicit def implicitBuilder[A, B]: Builder[(A, B), Map[A, B], Coll] = from.mapBuilder[A, B]
def empty[A, B]: Map[A, B] = new HashMap[A, B] with SynchronizeddMap[A, B]
}
*/
|