summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/IterableViewLike.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-04-20 20:43:37 +0000
committerPaul Phillips <paulp@improving.org>2011-04-20 20:43:37 +0000
commit21ea5ad62747504e2c17c10c779e5c7054a2a297 (patch)
tree8e3d4ac052ffd406d179da2694a9fd93724a4e13 /src/library/scala/collection/IterableViewLike.scala
parent9be2e5463396e4a5022745c9d61a8431d53e2f99 (diff)
downloadscala-21ea5ad62747504e2c17c10c779e5c7054a2a297.tar.gz
scala-21ea5ad62747504e2c17c10c779e5c7054a2a297.tar.bz2
scala-21ea5ad62747504e2c17c10c779e5c7054a2a297.zip
One of the blips in the performance charts seem...
One of the blips in the performance charts seems to implicate some changes I made with slice to reduce the number of implementations and surface area for inconsistencies and bugs. Altering those changes in a more performance-mindful way, although I don't see anything here which is likely to help much. Also fixing some wrong documentation about copyToArray. No review.
Diffstat (limited to 'src/library/scala/collection/IterableViewLike.scala')
-rw-r--r--src/library/scala/collection/IterableViewLike.scala12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/library/scala/collection/IterableViewLike.scala b/src/library/scala/collection/IterableViewLike.scala
index e0e1329844..e0f1ada2b8 100644
--- a/src/library/scala/collection/IterableViewLike.scala
+++ b/src/library/scala/collection/IterableViewLike.scala
@@ -63,6 +63,8 @@ trait IterableViewLike[+A,
trait ZippedAll[A1 >: A, B] extends Transformed[(A1, B)] with super[GenIterableViewLike].ZippedAll[A1, B]
+ private[this] implicit def asThis(xs: Transformed[A]): This = xs.asInstanceOf[This]
+
/** Boilerplate method, to override in each subclass
* This method could be eliminated if Scala had virtual classes
*/
@@ -81,6 +83,16 @@ trait IterableViewLike[+A,
protected override def newDroppedWhile(p: A => Boolean): Transformed[A] = new { val pred = p } with DroppedWhile
protected override def newTakenWhile(p: A => Boolean): Transformed[A] = new { val pred = p } with TakenWhile
+ // After adding take and drop overrides to IterableLike, these overrides (which do nothing
+ // but duplicate the implementation in TraversableViewLike) had to be added to prevent the
+ // overrides in IterableLike from besting the overrides in TraversableViewLike when mixed
+ // together in e.g. SeqViewLike. This is a suboptimal situation. Examples of failing tests
+ // are run/bug2876 and run/viewtest.
+ protected override def newTaken(n: Int): Transformed[A] = newSliced(SliceInterval(0, n))
+ protected override def newDropped(n: Int): Transformed[A] = newSliced(SliceInterval(n, Int.MaxValue))
+ override def drop(n: Int): This = newDropped(n)
+ override def take(n: Int): This = newTaken(n)
+
override def zip[A1 >: A, B, That](that: GenIterable[B])(implicit bf: CanBuildFrom[This, (A1, B), That]): That = {
newZipped(that).asInstanceOf[That]
// was: val b = bf(repr)