summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/mutable/SynchronizedMap.scala
blob: 450eaa5814831924a7317e203eff409d335b9ea3 (plain) (blame)
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
/*                     __                                               *\
**     ________ ___   / /  ___     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] {

  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: Iterable[(A, B)]): Unit = synchronized {
    super.++=(map)
  }

  override def ++=(it: Iterator[(A, B)]): Unit = synchronized {
    super.++=(it)
  }

  @deprecated
  override def incl(mappings: (A, B)*): Unit = synchronized {
    super.incl(mappings: _*)
  }

  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: Iterable[A]): Unit = synchronized {
    super.--=(keys)
  }

  override def --=(it: Iterator[A]): Unit = synchronized {
    super.--=(it)
  }

  @deprecated
  override def excl(keys: A*): Unit = synchronized {
    super.excl(keys: _*)
  }

  override def clear(): Unit = synchronized {
    super.clear
  }

  override def getOrElseUpdate(key: A, default: => B): B = synchronized {
    super.getOrElseUpdate(key, default)
  }

  override def transform(f: (A, B) => B): Unit = synchronized {
    super.transform(f)
  }

  override def retain(p: (A, B) => Boolean): Unit = synchronized {
    super.retain(p)
  }

  override def toString() = synchronized {
    super.toString()
  }

  override def equals(that: Any): Boolean = synchronized {
    super.equals(that)
  }

  override def hashCode(): Int = synchronized {
    super.hashCode()
  }

  override def <<(cmd: Message[(A, B)]): Unit = synchronized {
    super.<<(cmd)
  }

  override def clone(): Map[A, B] = synchronized {
    super.clone()
  }
}