Generate specialized abstract iterators for unsigned types

This commit is contained in:
Ilya Gorbunov
2018-04-28 17:34:28 +03:00
parent 188d8ab8dd
commit 4fbc48f83f
2 changed files with 63 additions and 0 deletions
+22
View File
@@ -21,6 +21,8 @@ fun generateUnsignedTypes(
generate(File(targetDir, "kotlin/${type.capitalized}.kt")) { UnsignedTypeGenerator(type, it) }
}
generate(File(targetDir, "kotlin/UIterators.kt"), ::UnsignedIteratorsGenerator)
}
@@ -171,3 +173,23 @@ class UnsignedTypeGenerator(val type: UnsignedType, out: PrintWriter) : BuiltIns
}
}
// TODO: reuse generator
class UnsignedIteratorsGenerator(out: PrintWriter) : BuiltInsSourceGenerator(out) {
override fun getPackage() = "kotlin.collections"
override fun generateBody() {
for (type in UnsignedType.values()) {
val s = type.capitalized
out.println("/** An iterator over a sequence of values of type `$s`. */")
out.println("public abstract class ${s}Iterator : Iterator<$s> {")
// TODO: Sort modifiers
out.println(" override final fun next() = next$s()")
out.println()
out.println(" /** Returns the next value in the sequence without boxing. */")
out.println(" public abstract fun next$s(): $s")
out.println("}")
out.println()
}
}
}