diff --git a/libraries/stdlib/src/kotlin/collections/Sequence.kt b/libraries/stdlib/src/kotlin/collections/Sequence.kt new file mode 100644 index 00000000000..ac5069d3f75 --- /dev/null +++ b/libraries/stdlib/src/kotlin/collections/Sequence.kt @@ -0,0 +1,14 @@ +package kotlin + +/** + * A sequence that returns values through its iterator. The values are evaluated lazily, and the sequence + * is potentially infinite. + * + * @param T the type of elements in the sequence. + */ +public interface Sequence { + /** + * Returns an iterator that returns the values from the sequence. + */ + public operator fun iterator(): Iterator +} diff --git a/libraries/stdlib/src/kotlin/collections/SequenceJVM.kt b/libraries/stdlib/src/kotlin/collections/SequenceJVM.kt deleted file mode 100644 index a542c32d1be..00000000000 --- a/libraries/stdlib/src/kotlin/collections/SequenceJVM.kt +++ /dev/null @@ -1,17 +0,0 @@ -@file:kotlin.jvm.JvmMultifileClass -@file:kotlin.jvm.JvmName("SequencesKt") - -package kotlin - -import java.util.concurrent.atomic.AtomicReference - - -internal class ConstrainedOnceSequence(sequence: Sequence) : Sequence { - private val sequenceRef = AtomicReference(sequence) - - override fun iterator(): Iterator { - val sequence = sequenceRef.getAndSet(null) ?: throw IllegalStateException("This sequence can be consumed only once.") - return sequence.iterator() - } -} - diff --git a/libraries/stdlib/src/kotlin/collections/Sequences.kt b/libraries/stdlib/src/kotlin/collections/Sequences.kt index 578321e2580..53117020ddd 100644 --- a/libraries/stdlib/src/kotlin/collections/Sequences.kt +++ b/libraries/stdlib/src/kotlin/collections/Sequences.kt @@ -6,18 +6,7 @@ package kotlin import java.util.* import kotlin.support.AbstractIterator -/** - * A sequence that returns values through its iterator. The values are evaluated lazily, and the sequence - * is potentially infinite. - * - * @param T the type of elements in the sequence. - */ -public interface Sequence { - /** - * Returns an iterator that returns the values from the sequence. - */ - public operator fun iterator(): Iterator -} + /** * Creates a sequence that returns all elements from this iterator. The sequence is constrained to be iterated only once. @@ -485,6 +474,18 @@ public fun Sequence.constrainOnce(): Sequence { return if (this is ConstrainedOnceSequence) this else ConstrainedOnceSequence(this) } +@kotlin.jvm.JvmVersion +private class ConstrainedOnceSequence(sequence: Sequence) : Sequence { + private val sequenceRef = java.util.concurrent.atomic.AtomicReference(sequence) + + override fun iterator(): Iterator { + val sequence = sequenceRef.getAndSet(null) ?: throw IllegalStateException("This sequence can be consumed only once.") + return sequence.iterator() + } +} + + + /** * Returns a sequence which invokes the function to calculate the next value on each iteration until the function returns `null`. *