Allow dropping and taking a lot of elements in very long sequences

For example allow dropping and taking Int.MAX_VALUE elements from
a sequence that is a result of another Int.MAX_VALUE dropping.
This commit is contained in:
Ilya Gorbunov
2018-08-09 18:57:01 +03:00
parent eaa0902ea5
commit c44f62a3d4
3 changed files with 23 additions and 2 deletions
@@ -421,8 +421,8 @@ internal class DropSequence<T>(
require(count >= 0) { "count must be non-negative, but was $count." }
}
override fun drop(n: Int): Sequence<T> = DropSequence(sequence, count + n)
override fun take(n: Int): Sequence<T> = SubSequence(sequence, count, count + n)
override fun drop(n: Int): Sequence<T> = (count + n).let { n1 -> if (n1 < 0) DropSequence(this, n) else DropSequence(sequence, n1) }
override fun take(n: Int): Sequence<T> = (count + n).let { n1 -> if (n1 < 0) TakeSequence(this, n) else SubSequence(sequence, count, n1) }
override fun iterator(): Iterator<T> = object : Iterator<T> {
val iterator = sequence.iterator()