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()
|
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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user