Cache toInt() and toLong() results in Decimal$Regular
This commit is contained in:
parent
65d076f634
commit
85aecaf79b
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user