From d161b8bcf25b24883e4adaec7058af44f83b3427 Mon Sep 17 00:00:00 2001 From: David MacIver Date: Mon, 1 Jun 2009 13:36:53 +0000 Subject: Some work towards fixing ticket #2030. --- .../generic/ImmutableSortedSetFactory.scala | 7 +++++++ .../scala/collection/generic/SortedSetFactory.scala | 19 +++++++++++++++++++ src/library/scala/collection/immutable/TreeSet.scala | 6 +----- 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 src/library/scala/collection/generic/ImmutableSortedSetFactory.scala create mode 100644 src/library/scala/collection/generic/SortedSetFactory.scala 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 TreeSet'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. -- cgit v1.2.3