Skip to content
This repository was archived by the owner on Dec 22, 2021. It is now read-only.

Commit 6195e9c

Browse files
committed
Implement some IndexedViews in terms of SeqViews
1 parent 236fa97 commit 6195e9c

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

collections/src/main/scala/strawman/collection/IndexedView.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ trait IndexedView[+A] extends IndexedSeqOps[A, View, View[A]] with SeqView[A] {
2020
}
2121
}
2222

23+
override def prepended[B >: A](elem: B): IndexedView[B] = new IndexedView.Prepended(elem, this)
2324
override def take(n: Int): IndexedView[A] = new IndexedView.Take(this, n)
2425
override def takeRight(n: Int): IndexedView[A] = new IndexedView.TakeRight(this, n)
2526
override def drop(n: Int): IndexedView[A] = new IndexedView.Drop(this, n)
@@ -30,16 +31,17 @@ trait IndexedView[+A] extends IndexedSeqOps[A, View, View[A]] with SeqView[A] {
3031

3132
object IndexedView {
3233

33-
class Id[+A](underlying: IndexedSeqOps[A, AnyConstr, _]) extends IndexedView[A] {
34+
class Id[+A](underlying: IndexedSeqOps[A, AnyConstr, _]) extends SeqView.Id(underlying) with IndexedView[A] {
3435
protected def finiteSize: Int = underlying.size
35-
def apply(idx: Int): A = underlying(idx)
3636
}
3737

38-
class Take[A](underlying: IndexedView[A], n: Int) extends IndexedView[A] {
38+
class Prepended[+A](elem: A, underlying: Iterable[A] with IndexedSeqOps[A, AnyConstr, _]) extends SeqView.Prepended(elem, underlying) with IndexedView[A] {
39+
protected def finiteSize: Int = underlying.size
40+
}
41+
42+
class Take[A](underlying: IndexedView[A], n: Int) extends SeqView.Take(underlying, n) with IndexedView[A] {
3943
private[this] val normN = n max 0
4044
protected def finiteSize = underlying.size min normN
41-
@throws[IndexOutOfBoundsException]
42-
def apply(i: Int) = underlying.apply(i)
4345
}
4446

4547
class TakeRight[A](underlying: IndexedView[A], n: Int) extends IndexedView[A] {
@@ -63,10 +65,8 @@ object IndexedView {
6365
def apply(i: Int) = underlying.apply(i)
6466
}
6567

66-
class Map[A, B](underlying: IndexedView[A], f: A => B) extends IndexedView[B] {
68+
class Map[A, B](underlying: IndexedView[A], f: A => B) extends SeqView.Map(underlying, f) with IndexedView[B] {
6769
protected def finiteSize = underlying.size
68-
@throws[IndexOutOfBoundsException]
69-
def apply(n: Int) = f(underlying.apply(n))
7070
}
7171

7272
class Reverse[A](underlying: IndexedView[A]) extends IndexedView[A] {

0 commit comments

Comments
 (0)