[K/N] Make Sequence<T>.constrainOnce() multi-thread friendly
This commit is contained in:
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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user