Cache toInt() and toLong() results in Decimal$Regular

This commit is contained in:
DBotThePony 2025-03-08 19:23:11 +07:00
parent 65d076f634
commit 85aecaf79b
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -240,24 +240,40 @@ sealed class Decimal : Number(), Comparable<Decimal> {
return mag.signum()
}
private var intCache = 0
private var intComputed = false
override fun toInt(): Int {
return if (whole > BI_INT_MAX) {
Int.MAX_VALUE
} else if (whole < BI_INT_MIN) {
Int.MIN_VALUE
} else {
whole.toInt()
if (!intComputed) {
intCache = if (whole > BI_INT_MAX) {
Int.MAX_VALUE
} else if (whole < BI_INT_MIN) {
Int.MIN_VALUE
} else {
whole.toInt()
}
intComputed = true
}
return intCache
}
private var longCache = 0L
private var longComputed = false
override fun toLong(): Long {
return if (whole > BI_LONG_MAX) {
Long.MAX_VALUE
} else if (whole < BI_LONG_MIN) {
Long.MIN_VALUE
} else {
whole.toLong()
if (!longComputed) {
longCache = if (whole > BI_LONG_MAX) {
Long.MAX_VALUE
} else if (whole < BI_LONG_MIN) {
Long.MIN_VALUE
} else {
whole.toLong()
}
}
return longCache
}
override fun compareTo(other: Decimal): Int {