@@ -15,7 +15,6 @@ package collection
15
15
package immutable
16
16
17
17
import generic ._
18
- import scala .collection .immutable .Map .MapBuilderImpl
19
18
import scala .util .hashing .MurmurHash3
20
19
21
20
/**
@@ -116,7 +115,7 @@ object Map extends ImmutableMapFactory[Map] {
116
115
if (isMapCBF(bf))
117
116
that match {
118
117
case hm : HashMap [a, b] if hm.size > 4 => hm.asInstanceOf [That ]
119
- case EmptyMap => this .asInstanceOf [That ]
118
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
120
119
case m : Map1 [_, _] => m.asInstanceOf [That ]
121
120
case m : Map2 [_, _] => m.asInstanceOf [That ]
122
121
case m : Map3 [_, _] => m.asInstanceOf [That ]
@@ -151,6 +150,20 @@ object Map extends ImmutableMapFactory[Map] {
151
150
if (key == key1) new Map1 (key1, value)
152
151
else new Map2 (key1, value1, key, value)
153
152
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
153
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
154
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
155
+ if (isMapCBF(bf)) that match {
156
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
157
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
158
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
159
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
160
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
161
+ case _ => super .++ (that)(bf)
162
+ } else super .++ (that)(bf)
163
+ }
164
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
165
+ m.updated(key1, value1)
166
+ }
154
167
def - (key : K ): Map [K , V ] =
155
168
if (key == key1) Map .empty else this
156
169
override def foreach [U ](f : ((K , V )) => U ): Unit = {
@@ -204,6 +217,21 @@ object Map extends ImmutableMapFactory[Map] {
204
217
else if (key == key2) new Map2 (key1, value1, key2, value)
205
218
else new Map3 (key1, value1, key2, value2, key, value)
206
219
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
220
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
221
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
222
+ if (isMapCBF(bf)) that match {
223
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
224
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
225
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
226
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
227
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
228
+ case _ => super .++ (that)(bf)
229
+ } else super .++ (that)(bf)
230
+ }
231
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
232
+ m.updated(key1, value1).
233
+ updated(key2, value2)
234
+ }
207
235
def - (key : K ): Map [K , V ] =
208
236
if (key == key1) new Map1 (key2, value2)
209
237
else if (key == key2) new Map1 (key1, value1)
@@ -280,6 +308,22 @@ object Map extends ImmutableMapFactory[Map] {
280
308
else if (key == key3) new Map3 (key1, value1, key2, value2, key3, value)
281
309
else new Map4 (key1, value1, key2, value2, key3, value3, key, value)
282
310
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
311
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
312
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
313
+ if (isMapCBF(bf)) that match {
314
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
315
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
316
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
317
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
318
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
319
+ case _ => super .++ (that)(bf)
320
+ } else super .++ (that)(bf)
321
+ }
322
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
323
+ m.updated(key1, value1).
324
+ updated(key2, value2).
325
+ updated(key3, value3)
326
+ }
283
327
def - (key : K ): Map [K , V ] =
284
328
if (key == key1) new Map2 (key2, value2, key3, value3)
285
329
else if (key == key2) new Map2 (key1, value1, key3, value3)
@@ -369,6 +413,23 @@ object Map extends ImmutableMapFactory[Map] {
369
413
else if (key == key4) new Map4 (key1, value1, key2, value2, key3, value3, key4, value)
370
414
else (new HashMap ).updated(key1,value1).updated(key2, value2).updated(key3, value3).updated(key4, value4).updated(key, value)
371
415
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
416
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
417
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
418
+ if (isMapCBF(bf)) that match {
419
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
420
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
421
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
422
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
423
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
424
+ case _ => super .++ (that)(bf)
425
+ } else super .++ (that)(bf)
426
+ }
427
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
428
+ m.updated(key1, value1).
429
+ updated(key2, value2).
430
+ updated(key3, value3).
431
+ updated(key4, value4)
432
+ }
372
433
def - (key : K ): Map [K , V ] =
373
434
if (key == key1) new Map3 (key2, value2, key3, value3, key4, value4)
374
435
else if (key == key2) new Map3 (key1, value1, key3, value3, key4, value4)
0 commit comments