downTo functions return sequence instead of range now.

This commit is contained in:
Evgeny Gerashchenko
2013-01-23 13:47:08 +04:00
parent 4736b8d6e7
commit 0051cb9553
2 changed files with 112 additions and 110 deletions
@@ -20,19 +20,21 @@ private fun generateDownTos(outputFile: File, header: String) {
fun generateDownTo(writer: PrintWriter, fromType: String, toType: String) {
val elementType = getMaxType(fromType, toType)
val rangeType = elementType + "Range"
val fromExpr = "this${ if (elementType == fromType) "" else ".to$elementType()" }"
if (elementType == "Float" || elementType == "Double") {
writer.println("""
public inline fun $fromType.downTo(to: $toType): $rangeType {
return $rangeType($fromExpr, to - this)
}""")
} else {
writer.println("""
public inline fun $fromType.downTo(to: $toType): $rangeType {
return if (this >= to) $rangeType($fromExpr, to - this - 1) else $rangeType.EMPTY
}""")
val rangeType = if (elementType == "Char") "CharacterSequence" else elementType + "Sequence"
val fromExpr = if (elementType == fromType) "this" else "this.to$elementType()"
val toExpr = if (elementType == toType) "to" else "to.to$elementType()"
val incrementExpr = when (elementType) {
"Long" -> "-1.toLong()"
"Float" -> "-1.toFloat()"
"Double" -> "-1.0"
else -> "-1"
}
writer.println("""
public inline fun $fromType.downTo(to: $toType): $rangeType {
return $rangeType($fromExpr, $toExpr, $incrementExpr)
}""")
}
println("Writing $outputFile")