diff options
author | David MacIver <david.maciver@gmail.com> | 2009-06-01 13:36:53 +0000 |
---|---|---|
committer | David MacIver <david.maciver@gmail.com> | 2009-06-01 13:36:53 +0000 |
commit | d161b8bcf25b24883e4adaec7058af44f83b3427 (patch) | |
tree | 891968e60cf1cf3874aa377aebce6978823f9a1a /src | |
parent | 26e953fc6b6295be28e3dc6558c3d76270bae877 (diff) | |
download | scala-d161b8bcf25b24883e4adaec7058af44f83b3427.tar.gz scala-d161b8bcf25b24883e4adaec7058af44f83b3427.tar.bz2 scala-d161b8bcf25b24883e4adaec7058af44f83b3427.zip |
Some work towards fixing ticket #2030.
Diffstat (limited to 'src')
3 files changed, 27 insertions, 5 deletions
diff --git a/src/library/scala/collection/generic/ImmutableSortedSetFactory.scala b/src/library/scala/collection/generic/ImmutableSortedSetFactory.scala new file mode 100644 index 0000000000..94284b505e --- /dev/null +++ b/src/library/scala/collection/generic/ImmutableSortedSetFactory.scala @@ -0,0 +1,7 @@ +package scala.collection.generic + +/** A template for companion objects of mutable.Map and subclasses thereof. + */ +abstract class ImmutableSortedSetFactory[CC[A] <: immutable.SortedSet[A] with SortedSetTemplate[A, CC[A]]] extends SortedSetFactory[CC]{ + def newBuilder[A](implicit ord: Ordering[A]): Builder[A, CC[A]] = new SetBuilder[A, CC[A]](empty) +} diff --git a/src/library/scala/collection/generic/SortedSetFactory.scala b/src/library/scala/collection/generic/SortedSetFactory.scala new file mode 100644 index 0000000000..3fdcea64fb --- /dev/null +++ b/src/library/scala/collection/generic/SortedSetFactory.scala @@ -0,0 +1,19 @@ +package scala.collection.generic + +/** A template for companion objects of Set and subclasses thereof. + */ +abstract class SortedSetFactory[CC[A] <: SortedSet[A] with SortedSetTemplate[A, CC[A]]] { + type Coll = CC[_] + + def newBuilder[A](implicit ord: Ordering[A]): Builder[A, CC[A]] + + def empty[A](implicit ord: Ordering[A]): CC[A] + + def apply[A](elems: A*)(implicit ord: Ordering[A]): CC[A] = (newBuilder[A](ord) ++= elems).result + + implicit def newBuilderFactory[A](implicit ord : Ordering[A]) : BuilderFactory[A, CC[A], Coll] = new SortedSetBuilderFactory()(ord); + + class SortedSetBuilderFactory[A](implicit ord: Ordering[A]) extends BuilderFactory[A, CC[A], Coll] { + def apply(from: Coll) = newBuilder[A](ord) + } +} diff --git a/src/library/scala/collection/immutable/TreeSet.scala b/src/library/scala/collection/immutable/TreeSet.scala index ddddf7bab0..36e4fc98c4 100644 --- a/src/library/scala/collection/immutable/TreeSet.scala +++ b/src/library/scala/collection/immutable/TreeSet.scala @@ -14,9 +14,8 @@ package scala.collection.immutable import generic._ /** The canonical factory of <a href="TreeSet.html">TreeSet</a>'s. */ -object TreeSet { +object TreeSet extends SortedSetFactory[TreeSet]{ - type Coll = TreeSet[_] implicit def implicitBuilder[A](implicit ordering : Ordering[A]) : Builder[A, TreeSet[A]] = newBuilder[A](ordering) def newBuilder[A](implicit ordering : Ordering[A]) : Builder[A, TreeSet[A]] = new AddingBuilder(empty[A](ordering)) @@ -24,9 +23,6 @@ object TreeSet { */ def empty[A](implicit ordering : Ordering[A]) = new TreeSet[A] - /** The canonical factory for this type - */ - def apply[A](elems: A*)(implicit ordering : Ordering[A]) : TreeSet[A] = empty[A] ++ elems } /** This class implements immutable sets using a tree. |