package scala.collection
import generic._
import mutable.ArrayBuffer
import scala.annotation.tailrec
trait IndexedSeqLike[+A, +Repr] extends SeqLike[A, Repr] {
self =>
override protected[this] def thisCollection: IndexedSeq[A] = this.asInstanceOf[IndexedSeq[A]]
override protected[this] def toCollection(repr: Repr): IndexedSeq[A] = repr.asInstanceOf[IndexedSeq[A]]
@SerialVersionUID(1756321872811029277L)
protected class Elements(start: Int, end: Int) extends BufferedIterator[A] with Serializable {
private def initialSize = if (end <= start) 0 else end - start
private var index = start
private def available = (end - index) max 0
def hasNext: Boolean = index < end
def next: A = {
if (index >= end)
Iterator.empty.next
val x = self(index)
index += 1
x
}
def head = {
if (index >= end)
Iterator.empty.next
self(index)
}
override def drop(n: Int): Iterator[A] =
if (n <= 0) new Elements(index, end)
else if (index + n >= end) new Elements(end, end)
else new Elements(index + n, end)
override def take(n: Int): Iterator[A] =
if (n <= 0) Iterator.empty
else if (n <= available) new Elements(index, index + n)
else new Elements(index, end)
override def slice(from: Int, until: Int): Iterator[A] =
this take until drop from
}
override
def iterator: Iterator[A] = new Elements(0, length)
override def toBuffer[A1 >: A]: mutable.Buffer[A1] = {
val result = new mutable.ArrayBuffer[A1](size)
copyToBuffer(result)
result
}
}