Coverage Summary for Class: RoundRobinIterable (com.vsevolodganin.clicktrack.utils.collection)
Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
RoundRobinIterable |
0%
(0/2)
|
0%
(0/2)
|
0%
(0/5)
|
0%
(0/24)
|
RoundRobinIterable$iterator$1 |
0%
(0/3)
|
0%
(0/2)
|
0%
(0/6)
|
0%
(0/21)
|
Total |
0%
(0/5)
|
0%
(0/4)
|
0%
(0/11)
|
0%
(0/45)
|
package com.vsevolodganin.clicktrack.utils.collection
fun <T> Iterable<T>.toRoundRobin(): Iterable<T> = RoundRobinIterable(this)
fun <T> Sequence<T>.toRoundRobin(): Sequence<T> = sequence {
while (true) {
yieldAll(this@toRoundRobin)
}
}
private class RoundRobinIterable<T>(private val source: Iterable<T>) : Iterable<T> {
init {
require(source.any()) { "Source should have at least one element" }
}
override fun iterator(): Iterator<T> = object : Iterator<T> {
private var iterator = source.iterator()
override fun hasNext(): Boolean = true
override fun next(): T {
if (!iterator.hasNext()) {
iterator = source.iterator()
}
return iterator.next()
}
}
}