38 lines
864 B
Kotlin
Vendored
38 lines
864 B
Kotlin
Vendored
@CompileTimeCalculation
|
|
abstract class BaseIterator(var baseStart: Int) {
|
|
fun baseNext(): Int {
|
|
baseStart += 1
|
|
return base()
|
|
}
|
|
|
|
abstract fun base(): Int
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
abstract class ComplexIterator(var complexStart: Int) : BaseIterator(complexStart) {
|
|
fun complexNext() = abstractCall()
|
|
|
|
private fun abstractCall(): Int {
|
|
complexStart *= 2
|
|
return complex() + baseNext()
|
|
}
|
|
|
|
abstract fun complex(): Int
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
class ImplementIterator constructor(val i: Int) : ComplexIterator(i) {
|
|
override fun complex(): Int {
|
|
return complexStart
|
|
}
|
|
|
|
override fun base(): Int {
|
|
return baseStart
|
|
}
|
|
}
|
|
|
|
@CompileTimeCalculation
|
|
fun getIterator(i: Int): ComplexIterator = ImplementIterator(i)
|
|
|
|
const val next = <!EVALUATED: `31`!>getIterator(10).complexNext()<!>
|