diff options
author | Paul Phillips <paulp@improving.org> | 2010-12-07 19:39:31 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-12-07 19:39:31 +0000 |
commit | 60a88e05b69af937f70101e5a4349520fabf44bf (patch) | |
tree | ee053607f20d03450227385f78676932ee127ac9 | |
parent | 32454d61e7a310b2d2c415650adb107571f1210b (diff) | |
download | scala-60a88e05b69af937f70101e5a4349520fabf44bf.tar.gz scala-60a88e05b69af937f70101e5a4349520fabf44bf.tar.bz2 scala-60a88e05b69af937f70101e5a4349520fabf44bf.zip |
Extricated Addable and AddingBuilder from the f...
Extricated Addable and AddingBuilder from the few classes still
utilizing them and deprecated both. Closes #4059. Already endorsed by
odersky, so no review.
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 +} |