generate also the Char class

This commit is contained in:
Dmitry Jemerov
2015-03-06 21:25:38 +01:00
parent 26e452383e
commit 89398796c6
3 changed files with 86 additions and 95 deletions
@@ -31,16 +31,19 @@ class GenerateNumbers(out: PrintWriter) : BuiltInsSourceGenerator(out) {
PrimitiveType.LONG to "64-bit signed integer",
PrimitiveType.INT to "32-bit signed integer",
PrimitiveType.SHORT to "16-bit signed integer",
PrimitiveType.BYTE to "8-bit signed integer"
PrimitiveType.BYTE to "8-bit signed integer",
PrimitiveType.CHAR to "16-bit Unicode character"
)
override fun generateBody() {
for (kind in PrimitiveType.values()) {
if (kind == PrimitiveType.BOOLEAN || kind == PrimitiveType.CHAR) continue
for (kind in PrimitiveType.exceptBoolean) {
val className = kind.capitalized
generateDoc(kind)
out.println("public class $className private () : Number, Comparable<$className> {")
out.print("public class $className private () : ")
if (kind != PrimitiveType.CHAR) {
out.print("Number, ")
}
out.println("Comparable<$className> {")
out.print(" default object")
if (kind == PrimitiveType.FLOAT || kind == PrimitiveType.DOUBLE) {
@@ -88,6 +91,9 @@ class GenerateNumbers(out: PrintWriter) : BuiltInsSourceGenerator(out) {
private fun generateOperator(name: String, thisKind: PrimitiveType) {
for (otherKind in PrimitiveType.exceptBoolean) {
if (thisKind == PrimitiveType.CHAR && otherKind == PrimitiveType.CHAR && name != "minus") {
continue
}
val returnType = getOperatorReturnType(thisKind, otherKind)
out.println(" public fun $name(other: ${otherKind.capitalized}): $returnType")
}
@@ -95,9 +101,13 @@ class GenerateNumbers(out: PrintWriter) : BuiltInsSourceGenerator(out) {
}
private fun generateRangeTo(thisKind: PrimitiveType) {
for (otherKind in PrimitiveType.exceptBoolean) {
val returnType = if (otherKind.ordinal() > thisKind.ordinal()) otherKind else thisKind
out.println(" public fun rangeTo(other: ${otherKind.capitalized}): ${returnType.capitalized}Range")
if (thisKind == PrimitiveType.CHAR) {
out.println(" public fun rangeTo(other: Char): CharRange")
} else {
for (otherKind in PrimitiveType.exceptBoolean) {
val returnType = if (otherKind.ordinal() > thisKind.ordinal()) otherKind else thisKind
out.println(" public fun rangeTo(other: ${otherKind.capitalized}): ${returnType.capitalized}Range")
}
}
out.println()
@@ -105,7 +115,7 @@ class GenerateNumbers(out: PrintWriter) : BuiltInsSourceGenerator(out) {
private fun generateUnaryOperators(kind: PrimitiveType) {
for (name in unaryOperators) {
val returnType = if (kind in listOf(PrimitiveType.SHORT, PrimitiveType.BYTE) &&
val returnType = if (kind in listOf(PrimitiveType.SHORT, PrimitiveType.BYTE, PrimitiveType.CHAR) &&
name in listOf("plus", "minus")) "Int" else kind.capitalized
out.println(" public fun $name(): $returnType")
}