diff options
Diffstat (limited to 'src/library/scala/collection/immutable/Stream.scala')
-rw-r--r-- | src/library/scala/collection/immutable/Stream.scala | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/library/scala/collection/immutable/Stream.scala b/src/library/scala/collection/immutable/Stream.scala index 5e678edddf..7ac6b78bf4 100644 --- a/src/library/scala/collection/immutable/Stream.scala +++ b/src/library/scala/collection/immutable/Stream.scala @@ -12,7 +12,7 @@ package scala.collection.immutable import mutable.ListBuffer -import generic.{SequenceFactory, Builder, BuilderFactory, LazyBuilder, LinearSequenceTemplate} +import generic._ /** * <p>The class <code>Stream</code> implements lazy lists where elements @@ -35,8 +35,12 @@ import generic.{SequenceFactory, Builder, BuilderFactory, LazyBuilder, LinearSeq * @author Martin Odersky, Matthias Zenger * @version 1.1 08/08/03 */ -abstract class Stream[+A] extends LinearSequence[A] with LinearSequenceTemplate[A, Stream[A]] { +abstract class Stream[+A] extends LinearSequence[A] + with TraversableClass[A, Stream] + with LinearSequenceTemplate[A, Stream[A]] { self => + override def companion: Companion[Stream] = Stream + import collection.{Traversable, Iterable, Sequence, Vector} /** is this stream empty? */ @@ -57,14 +61,6 @@ self => // Implementation of abstract method in Traversable - /** The builder for stream objects. - * @note: This builder is lazy only in the sense that it does not go downs the spine - * of traversables taht are added as a whole. If more layzness can be achieved, - * this builder should be bypassed. - */ - override protected[this] def newBuilder = Stream.newBuilder - override def traversableBuilder[B]: Builder[B, Stream[B]] = Stream.newBuilder[B] - // New methods in Stream /** The stream resulting from the concatenation of this stream with the argument stream. @@ -367,8 +363,8 @@ self => */ object Stream extends SequenceFactory[Stream] { - type Coll = Stream[_] - class StreamBuilderFactory[A] extends BuilderFactory[A, Stream[A], Coll] { def apply(from: Coll) = from.traversableBuilder[A] } + class StreamBuilderFactory[A] extends VirtualBuilderFactory[A] + implicit def builderFactory[A]: BuilderFactory[A, Stream[A], Coll] = new StreamBuilderFactory[A] /** Creates a new builder for a stream */ @@ -377,6 +373,9 @@ object Stream extends SequenceFactory[Stream] { import collection.{Iterable, Sequence, Vector} /** A builder for streams + * @note: This builder is lazy only in the sense that it does not go downs the spine + * of traversables taht are added as a whole. If more layzness can be achieved, + * this builder should be bypassed. */ class StreamBuilder[A] extends LazyBuilder[A, Stream[A]] { def result: Stream[A] = (for (xs <- parts.elements; x <- xs.toIterable.elements) yield x).toStream |