summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library/scala/Enumeration.scala4
-rw-r--r--src/library/scala/collection/MapLike.scala2
-rw-r--r--src/library/scala/collection/SetLike.scala24
-rw-r--r--src/library/scala/collection/generic/Addable.scala1
-rw-r--r--src/library/scala/collection/generic/ImmutableSetFactory.scala4
-rw-r--r--src/library/scala/collection/immutable/BitSet.scala4
-rw-r--r--src/library/scala/collection/immutable/TreeSet.scala4
-rw-r--r--src/library/scala/collection/interfaces/SetMethods.scala10
-rw-r--r--src/library/scala/collection/mutable/AddingBuilder.scala1
-rw-r--r--src/library/scala/collection/mutable/BufferLike.scala3
-rw-r--r--src/library/scala/collection/mutable/GrowingBuilder.scala11
-rw-r--r--src/library/scala/collection/mutable/SetBuilder.scala8
12 files changed, 38 insertions, 38 deletions
diff --git a/src/library/scala/Enumeration.scala b/src/library/scala/Enumeration.scala
index fa786ddb0e..7039fec4bf 100644
--- a/src/library/scala/Enumeration.scala
+++ b/src/library/scala/Enumeration.scala
@@ -253,7 +253,7 @@ abstract class Enumeration(initial: Int, names: String*) extends Serializable {
/** A factory object for value sets */
object ValueSet {
- import mutable.{ Builder, AddingBuilder }
+ import mutable.{ Builder, SetBuilder }
import generic.CanBuildFrom
/** The empty value set */
@@ -261,7 +261,7 @@ abstract class Enumeration(initial: Int, names: String*) extends Serializable {
/** A value set consisting of given elements */
def apply(elems: Value*): ValueSet = empty ++ elems
/** A builder object for value sets */
- def newBuilder: Builder[Value, ValueSet] = new AddingBuilder(empty)
+ def newBuilder: Builder[Value, ValueSet] = new SetBuilder(empty)
/** The implicit builder for value sets */
implicit def canBuildFrom: CanBuildFrom[ValueSet, Value, ValueSet] =
new CanBuildFrom[ValueSet, Value, ValueSet] {
diff --git a/src/library/scala/collection/MapLike.scala b/src/library/scala/collection/MapLike.scala
index df3e3c62ff..2d2eb5c104 100644
--- a/src/library/scala/collection/MapLike.scala
+++ b/src/library/scala/collection/MapLike.scala
@@ -59,8 +59,6 @@ trait MapLike[A, +B, +This <: MapLike[A, B, This] with Map[A, B]]
with IterableLike[(A, B), This]
with Subtractable[A, This] {
self =>
- // note: can't inherit Addable because of variance problems: Map
- // is covariant in its value type B, but Addable is nonvariant.
/** The empty map of the same type as this map
* @return an empty map of type `This`.
diff --git a/src/library/scala/collection/SetLike.scala b/src/library/scala/collection/SetLike.scala
index 8df0fb9c9d..ae66ad4afa 100644
--- a/src/library/scala/collection/SetLike.scala
+++ b/src/library/scala/collection/SetLike.scala
@@ -10,7 +10,7 @@
package scala.collection
import generic._
-import mutable.{Builder, AddingBuilder}
+import mutable.{ Builder, SetBuilder }
import scala.annotation.migration
/** A template trait for sets.
@@ -57,7 +57,6 @@ import scala.annotation.migration
*/
trait SetLike[A, +This <: SetLike[A, This] with Set[A]]
extends IterableLike[A, This]
- with Addable[A, This]
with Subtractable[A, This] {
self =>
@@ -71,7 +70,7 @@ self =>
* <a href="mutable/SetLike.html" target="ContentFrame">
* `mutable.SetLike`</a>.
*/
- override protected[this] def newBuilder: Builder[A, This] = new AddingBuilder[A, This](empty)
+ override protected[this] def newBuilder: Builder[A, This] = new SetBuilder[A, This](empty)
/** Overridden for efficiency. */
override def toSeq: Seq[A] = toBuffer[A]
@@ -103,6 +102,25 @@ self =>
*/
def + (elem: A): This
+ /** Creates a new $coll with additional elements.
+ *
+ * This method takes two or more elements to be added. Another overloaded
+ * variant of this method handles the case where a single element is added.
+ *
+ * @param elem1 the first element to add.
+ * @param elem2 the second element to add.
+ * @param elems the remaining elements to add.
+ * @return a new $coll with the given elements added.
+ */
+ def + (elem1: A, elem2: A, elems: A*): This = this + elem1 + elem2 ++ elems
+
+ /** Creates a new $coll by adding all elements contained in another collection to this $coll.
+ *
+ * @param elems the collection containing the added elements.
+ * @return a new $coll with the given elements added.
+ */
+ def ++ (elems: TraversableOnce[A]): This = newBuilder ++= this ++= elems result
+
/** Creates a new set with a given element removed from this set.
*
* @param elem the element to be removed
diff --git a/src/library/scala/collection/generic/Addable.scala b/src/library/scala/collection/generic/Addable.scala
index 8411022404..b9cb9043f0 100644
--- a/src/library/scala/collection/generic/Addable.scala
+++ b/src/library/scala/collection/generic/Addable.scala
@@ -21,6 +21,7 @@ package generic
* @define $coll collection
* @define $Coll Addable
*/
+@deprecated("Will be removed after scala 2.9")
trait Addable[A, +Repr <: Addable[A, Repr]] { self =>
/** The representation object of type `Repr` which contains the collection's elements
diff --git a/src/library/scala/collection/generic/ImmutableSetFactory.scala b/src/library/scala/collection/generic/ImmutableSetFactory.scala
index a551786f25..0672ff7b06 100644
--- a/src/library/scala/collection/generic/ImmutableSetFactory.scala
+++ b/src/library/scala/collection/generic/ImmutableSetFactory.scala
@@ -9,10 +9,10 @@
package scala.collection
package generic
-import mutable.{ Builder, AddingBuilder }
+import mutable.{ Builder, SetBuilder }
abstract class ImmutableSetFactory[CC[X] <: immutable.Set[X] with SetLike[X, CC[X]]]
extends SetFactory[CC] {
- def newBuilder[A]: Builder[A, CC[A]] = new AddingBuilder[A, CC[A]](empty[A])
+ def newBuilder[A]: Builder[A, CC[A]] = new SetBuilder[A, CC[A]](empty[A])
}
diff --git a/src/library/scala/collection/immutable/BitSet.scala b/src/library/scala/collection/immutable/BitSet.scala
index fe3edbe88b..bf652b47b0 100644
--- a/src/library/scala/collection/immutable/BitSet.scala
+++ b/src/library/scala/collection/immutable/BitSet.scala
@@ -13,7 +13,7 @@ package immutable
import generic._
import BitSetLike.{LogWL, updateArray}
-import mutable.{ Builder, AddingBuilder }
+import mutable.{ Builder, SetBuilder }
/** A class for immutable bitsets.
* $bitsetinfo
@@ -65,7 +65,7 @@ object BitSet extends BitSetFactory[BitSet] {
val empty: BitSet = new BitSet1(0L)
/** An adding builder for immutable Sets. */
- def newBuilder: Builder[Int, BitSet] = new AddingBuilder[Int, BitSet](empty)
+ def newBuilder: Builder[Int, BitSet] = new SetBuilder[Int, BitSet](empty)
/** $bitsetCanBuildFrom */
implicit def canBuildFrom: CanBuildFrom[BitSet, Int, BitSet] = bitsetCanBuildFrom
diff --git a/src/library/scala/collection/immutable/TreeSet.scala b/src/library/scala/collection/immutable/TreeSet.scala
index d769aee84d..20f79cb8cf 100644
--- a/src/library/scala/collection/immutable/TreeSet.scala
+++ b/src/library/scala/collection/immutable/TreeSet.scala
@@ -12,7 +12,7 @@ package scala.collection
package immutable
import generic._
-import mutable.{ Builder, AddingBuilder }
+import mutable.{ Builder, SetBuilder }
/** $factoryInfo
* @define Coll immutable.TreeSet
@@ -21,7 +21,7 @@ import mutable.{ Builder, AddingBuilder }
object TreeSet extends ImmutableSortedSetFactory[TreeSet] {
implicit def implicitBuilder[A](implicit ordering: Ordering[A]): Builder[A, TreeSet[A]] = newBuilder[A](ordering)
override def newBuilder[A](implicit ordering: Ordering[A]): Builder[A, TreeSet[A]] =
- new AddingBuilder(empty[A](ordering))
+ new SetBuilder(empty[A](ordering))
/** The empty set of this type
*/
diff --git a/src/library/scala/collection/interfaces/SetMethods.scala b/src/library/scala/collection/interfaces/SetMethods.scala
index 3b24436498..4ff94824ba 100644
--- a/src/library/scala/collection/interfaces/SetMethods.scala
+++ b/src/library/scala/collection/interfaces/SetMethods.scala
@@ -17,15 +17,6 @@ import annotation.unchecked.uncheckedVariance
/**
* @since 2.8
*/
-trait AddableMethods[A, +This <: Addable[A, This]] {
- def +(elem: A): This
- def +(elem1: A, elem2: A, elems: A*): This
- def ++(xs: TraversableOnce[A]): This
-}
-
-/**
- * @since 2.8
- */
trait SubtractableMethods[A, +This <: Subtractable[A, This]] {
def -(elem: A): This
def -(elem1: A, elem2: A, elems: A*): This
@@ -37,7 +28,6 @@ trait SubtractableMethods[A, +This <: Subtractable[A, This]] {
*/
trait SetMethods[A, +This <: SetLike[A, This] with Set[A]]
extends IterableMethods[A, This]
- with AddableMethods[A, This]
with SubtractableMethods[A, This] {
self: Set[A] =>
diff --git a/src/library/scala/collection/mutable/AddingBuilder.scala b/src/library/scala/collection/mutable/AddingBuilder.scala
index 5dbf4813bf..9dd9a6a818 100644
--- a/src/library/scala/collection/mutable/AddingBuilder.scala
+++ b/src/library/scala/collection/mutable/AddingBuilder.scala
@@ -27,6 +27,7 @@ import generic._
* @version 2.8
* @since 2.8
*/
+@deprecated("Will be removed after scala 2.9")
class AddingBuilder[Elem, To <: Addable[Elem, To] with collection.Iterable[Elem] with collection.IterableLike[Elem, To]](empty: To)
extends Builder[Elem, To] {
protected var elems: To = empty
diff --git a/src/library/scala/collection/mutable/BufferLike.scala b/src/library/scala/collection/mutable/BufferLike.scala
index 32c666ea58..0d12b9e990 100644
--- a/src/library/scala/collection/mutable/BufferLike.scala
+++ b/src/library/scala/collection/mutable/BufferLike.scala
@@ -67,9 +67,6 @@ trait BufferLike[A, +This <: BufferLike[A, This] with Buffer[A]]
with SeqLike[A, This]
{ self : This =>
- // Note this does not extend Addable because `+` is being phased out of
- // all Seq-derived classes.
-
// Abstract methods from Seq:
def apply(n: Int): A
diff --git a/src/library/scala/collection/mutable/GrowingBuilder.scala b/src/library/scala/collection/mutable/GrowingBuilder.scala
index 781753c24d..b9066266fe 100644
--- a/src/library/scala/collection/mutable/GrowingBuilder.scala
+++ b/src/library/scala/collection/mutable/GrowingBuilder.scala
@@ -12,16 +12,7 @@ package mutable
import generic._
/** The canonical builder for collections that are growable, i.e. that support an
- * efficient `+=` method which adds an element to the collection. It is
- * almost identical to `AddingBuilder`, but necessitated by the existence of
- * classes which are `Growable` but not `Addable`, which is a result of covariance
- * interacting surprisingly with any2stringadd thus driving '+' out of the `Seq`
- * hierarchy. The tendrils of original sin should never be underestimated.
- *
- * Addendum: of even greater significance is that '+' on mutable collections now
- * creates a new collection. This means using AddingBuilder on them will create
- * a new intermediate collection for every element given to the builder, taking
- * '+' from an O(1) to O(n) operation.
+ * efficient `+=` method which adds an element to the collection.
*
* @author Paul Phillips
* @version 2.8
diff --git a/src/library/scala/collection/mutable/SetBuilder.scala b/src/library/scala/collection/mutable/SetBuilder.scala
index 6cab092d06..f3e67d9412 100644
--- a/src/library/scala/collection/mutable/SetBuilder.scala
+++ b/src/library/scala/collection/mutable/SetBuilder.scala
@@ -19,5 +19,9 @@ import generic._
* @param empty The empty element of the collection.
* @since 2.8
*/
-class SetBuilder[A, Coll <: Addable[A, Coll] with collection.Iterable[A] with collection.IterableLike[A, Coll]](empty: Coll)
-extends AddingBuilder[A, Coll](empty) { }
+class SetBuilder[A, Coll <: collection.Set[A] with collection.SetLike[A, Coll]](empty: Coll) extends Builder[A, Coll] {
+ protected var elems: Coll = empty
+ def +=(x: A): this.type = { elems = elems + x; this }
+ def clear() { elems = empty }
+ def result: Coll = elems
+}