Skip to content

Commit 88bb972

Browse files
committed
Apply additional changes
1 parent e780c3c commit 88bb972

File tree

2 files changed

+31
-31
lines changed

2 files changed

+31
-31
lines changed

library/src/scala/collection/immutable/LinkedMap.scala

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,24 @@ import scala.collection.mutable.{Builder, ImmutableBuilder}
88

99
/**
1010
* A generic trait for ordered immutable maps. Concrete classes have to provide
11-
* functionality for the abstract methods in `LinkedMap`:
11+
* functionality for the abstract methods in `LinkedMap`.
1212
*
13-
* @tparam A
14-
* @tparam B
13+
* Note that when checking for equality [[LinkedMap]] does not take into account
14+
* ordering.
15+
*
16+
* @tparam K the type of the keys contained in this linked map.
17+
* @tparam V the type of the values associated with the keys in this linked map.
18+
*
19+
* @author Matthew de Detrich
20+
* @version 2.13
21+
* @since 2.13
22+
* @define coll immutable linked map
23+
* @define Coll `immutable.LinkedMap`
1524
*/
1625

1726
trait LinkedMap[K, +V]
18-
extends Map[K, V]
19-
with Iterable[(K, V)]
27+
extends AbstractMap[K, V]
2028
with MapOps[K, V, LinkedMap, LinkedMap[K, V]]
21-
with Equals
2229

2330
object LinkedMap extends MapFactory[LinkedMap] {
2431
def empty[K, V]: LinkedMap[K, V] = EmptyLinkedMap.asInstanceOf[LinkedMap[K, V]]
@@ -30,9 +37,7 @@ object LinkedMap extends MapFactory[LinkedMap] {
3037
}
3138

3239
def newBuilder[K, V]: Builder[(K, V), LinkedMap[K, V]] =
33-
new ImmutableBuilder[(K, V), LinkedMap[K, V]](empty) {
34-
def addOne(elem: (K, V)): this.type = { elems = elems + elem; this }
35-
}
40+
new MapFactory.Delegate[LinkedMap](VectorMap).newBuilder
3641

3742
@SerialVersionUID(3L)
3843
private object EmptyLinkedMap extends LinkedMap[Any, Nothing] {

library/src/scala/collection/immutable/VectorMap.scala

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,24 @@ import scala.collection.immutable.Map.useBaseline
2323
* @define Coll `immutable.VectorMap`
2424
*/
2525
final class VectorMap[K, +V] private[immutable] (
26-
val fields: Vector[K],
27-
val underlying: Map[K, (Int, V)])
26+
private val fields: Vector[K],
27+
private val underlying: Map[K, (Int, V)])
2828
extends AbstractMap[K, V]
2929
with LinkedMap[K, V]
3030
with MapOps[K, V, VectorMap, VectorMap[K, V]]
3131
with StrictOptimizedIterableOps[(K, V), Iterable, VectorMap[K, V]] {
3232

3333
override protected[this] def className: String = "VectorMap"
3434

35-
override def updated[V1 >: V](key: K, value: V1): VectorMap[K, V1] = {
36-
if (underlying.get(key).isDefined) {
37-
val oldKey = underlying(key)._1
38-
new VectorMap(fields,
39-
underlying.updated(key, (oldKey, value.asInstanceOf[V])))
40-
} else {
41-
new VectorMap(
42-
fields :+ key,
43-
underlying.updated(key, (fields.length + 1, value.asInstanceOf[V])))
35+
def updated[V1 >: V](key: K, value: V1): VectorMap[K, V1] = {
36+
underlying.get(key) match {
37+
case Some(oldIndexWithValue) =>
38+
new VectorMap(fields,
39+
underlying.updated(key, (oldIndexWithValue._1, value)))
40+
case None =>
41+
new VectorMap(
42+
fields :+ key,
43+
underlying.updated(key, (fields.length + 1, value)))
4444
}
4545
}
4646

@@ -49,7 +49,7 @@ final class VectorMap[K, +V] private[immutable] (
4949

5050
override def withDefaultValue[V1 >: V](d: V1): Map.WithDefault[K, V1] = new Map.WithDefault[K, V1](this, _ => d)
5151

52-
override def iterator: Iterator[(K, V)] = new Iterator[(K, V)] {
52+
def iterator: Iterator[(K, V)] = new Iterator[(K, V)] {
5353
private val fieldsIterator = fields.iterator
5454

5555
override def hasNext: Boolean = fieldsIterator.hasNext
@@ -60,12 +60,12 @@ final class VectorMap[K, +V] private[immutable] (
6060
}
6161
}
6262

63-
override def get(key: K): Option[V] = underlying.get(key) match {
63+
def get(key: K): Option[V] = underlying.get(key) match {
6464
case Some(v) => Some(v._2)
6565
case None => None
6666
}
6767

68-
override def remove(key: K): VectorMap[K, V] = {
68+
def remove(key: K): VectorMap[K, V] = {
6969
underlying.get(key) match {
7070
case Some((index, _)) =>
7171
new VectorMap(fields.patch(index, Nil, 1), underlying - key)
@@ -99,22 +99,17 @@ final class VectorMap[K, +V] private[immutable] (
9999
}
100100

101101
override def tail: VectorMap[K, V] = {
102-
val tail = fields.last
103-
104-
new VectorMap(fields.slice(1, fields.size), underlying.remove(tail))
102+
new VectorMap(fields.tail, underlying.remove(fields.last))
105103
}
106104

107105
override def init: VectorMap[K, V] = {
108-
val head = fields.head
109-
110-
new VectorMap(fields.slice(1, fields.size - 0), underlying.remove(head))
106+
new VectorMap(fields.init, underlying.remove(fields.head))
111107
}
112108

113109
// Only care about content, not ordering for equality
114110
override def equals(that: Any): Boolean =
115111
that match {
116-
case vmap: VectorMap[K, V] =>
117-
underlying == vmap.underlying
112+
case vmap: VectorMap[_, _] => underlying == vmap.underlying
118113
case _ => super.equals(that)
119114
}
120115

0 commit comments

Comments
 (0)