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() return mag.signum()
} }
private var intCache = 0
private var intComputed = false
override fun toInt(): Int { override fun toInt(): Int {
return if (whole > BI_INT_MAX) { if (!intComputed) {
Int.MAX_VALUE intCache = if (whole > BI_INT_MAX) {
} else if (whole < BI_INT_MIN) { Int.MAX_VALUE
Int.MIN_VALUE } else if (whole < BI_INT_MIN) {
} else { Int.MIN_VALUE
whole.toInt() } else {
whole.toInt()
}
intComputed = true
} }
return intCache
} }
private var longCache = 0L
private var longComputed = false
override fun toLong(): Long { override fun toLong(): Long {
return if (whole > BI_LONG_MAX) { if (!longComputed) {
Long.MAX_VALUE longCache = if (whole > BI_LONG_MAX) {
} else if (whole < BI_LONG_MIN) { Long.MAX_VALUE
Long.MIN_VALUE } else if (whole < BI_LONG_MIN) {
} else { Long.MIN_VALUE
whole.toLong() } else {
whole.toLong()
}
} }
return longCache
} }
override fun compareTo(other: Decimal): Int { override fun compareTo(other: Decimal): Int {