[K/N] Make Sequence<T>.constrainOnce() multi-thread friendly

This commit is contained in:
Abduqodiri Qurbonzoda
2023-05-30 00:16:33 +03:00
committed by Space Team
parent 7d9ea28604
commit e1b6f8198a
@@ -8,13 +8,10 @@ package kotlin.sequences
import kotlin.comparisons.*
internal actual class ConstrainedOnceSequence<T> actual constructor(sequence: Sequence<T>) : Sequence<T> {
// TODO: not MT friendly.
private var sequenceRef : Sequence<T>? = sequence
private val sequenceRef = kotlin.concurrent.AtomicReference<Sequence<T>?>(sequence)
override actual fun iterator(): Iterator<T> {
val sequence = sequenceRef
if (sequence == null) throw IllegalStateException("This sequence can be consumed only once.")
sequenceRef = null
val sequence = sequenceRef.getAndSet(null) ?: throw IllegalStateException("This sequence can be consumed only once.")
return sequence.iterator()
}
}