@@ -117,7 +117,7 @@ object Map extends ImmutableMapFactory[Map] {
117
117
if (isMapCBF(bf))
118
118
that match {
119
119
case hm : HashMap [a, b] if hm.size > 4 => hm.asInstanceOf [That ]
120
- case EmptyMap => this .asInstanceOf [That ]
120
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
121
121
case m : Map1 [_, _] => m.asInstanceOf [That ]
122
122
case m : Map2 [_, _] => m.asInstanceOf [That ]
123
123
case m : Map3 [_, _] => m.asInstanceOf [That ]
@@ -172,6 +172,20 @@ object Map extends ImmutableMapFactory[Map] {
172
172
if (key == key1) new Map1 (key1, value)
173
173
else new Map2 (key1, value1, key, value)
174
174
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
175
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
176
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
177
+ if (isMapCBF(bf)) that match {
178
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
179
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
180
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
181
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
182
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
183
+ case _ => super .++ (that)(bf)
184
+ } else super .++ (that)(bf)
185
+ }
186
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
187
+ m.updated(key1, value1)
188
+ }
175
189
def - (key : K ): Map [K , V ] =
176
190
if (key == key1) Map .empty else this
177
191
override def foreach [U ](f : ((K , V )) => U ): Unit = {
@@ -235,6 +249,21 @@ object Map extends ImmutableMapFactory[Map] {
235
249
else if (key == key2) new Map2 (key1, value1, key2, value)
236
250
else new Map3 (key1, value1, key2, value2, key, value)
237
251
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
252
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
253
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
254
+ if (isMapCBF(bf)) that match {
255
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
256
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
257
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
258
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
259
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
260
+ case _ => super .++ (that)(bf)
261
+ } else super .++ (that)(bf)
262
+ }
263
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
264
+ m.updated(key1, value1).
265
+ updated(key2, value2)
266
+ }
238
267
def - (key : K ): Map [K , V ] =
239
268
if (key == key1) new Map1 (key2, value2)
240
269
else if (key == key2) new Map1 (key1, value1)
@@ -321,6 +350,22 @@ object Map extends ImmutableMapFactory[Map] {
321
350
else if (key == key3) new Map3 (key1, value1, key2, value2, key3, value)
322
351
else new Map4 (key1, value1, key2, value2, key3, value3, key, value)
323
352
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
353
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
354
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
355
+ if (isMapCBF(bf)) that match {
356
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
357
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
358
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
359
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
360
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
361
+ case _ => super .++ (that)(bf)
362
+ } else super .++ (that)(bf)
363
+ }
364
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
365
+ m.updated(key1, value1).
366
+ updated(key2, value2).
367
+ updated(key3, value3)
368
+ }
324
369
def - (key : K ): Map [K , V ] =
325
370
if (key == key1) new Map2 (key2, value2, key3, value3)
326
371
else if (key == key2) new Map2 (key1, value1, key3, value3)
@@ -420,6 +465,23 @@ object Map extends ImmutableMapFactory[Map] {
420
465
else if (key == key4) new Map4 (key1, value1, key2, value2, key3, value3, key4, value)
421
466
else (new HashMap ).updated(key1,value1).updated(key2, value2).updated(key3, value3).updated(key4, value4).updated(key, value)
422
467
def + [V1 >: V ](kv : (K , V1 )): Map [K , V1 ] = updated(kv._1, kv._2)
468
+ override def ++ [V1 >: V ](xs : GenTraversableOnce [(K , V1 )]): Map [K , V1 ] = ++ [(K , V1 ), Map [K , V1 ]](xs)(Map .canBuildFrom[K , V1 ])
469
+ override def ++ [B >: (K , V ), That ](that : GenTraversableOnce [B ])(implicit bf : CanBuildFrom [Map [K , V ], B , That ]): That = {
470
+ if (isMapCBF(bf)) that match {
471
+ case m : AnyRef if m eq EmptyMap => this .asInstanceOf [That ]
472
+ case m : Map1 [K , V ] => m.addTo(this ).asInstanceOf [That ]
473
+ case m : Map2 [K , V ] => m.addTo(this ).asInstanceOf [That ]
474
+ case m : Map3 [K , V ] => m.addTo(this ).asInstanceOf [That ]
475
+ case m : Map4 [K , V ] => m.addTo(this ).asInstanceOf [That ]
476
+ case _ => super .++ (that)(bf)
477
+ } else super .++ (that)(bf)
478
+ }
479
+ private [Map ] def addTo [V1 >: V ](m : Map [K ,V1 ]): Map [K , V1 ] = {
480
+ m.updated(key1, value1).
481
+ updated(key2, value2).
482
+ updated(key3, value3).
483
+ updated(key4, value4)
484
+ }
423
485
def - (key : K ): Map [K , V ] =
424
486
if (key == key1) new Map3 (key2, value2, key3, value3, key4, value4)
425
487
else if (key == key2) new Map3 (key1, value1, key3, value3, key4, value4)
0 commit comments