Twidere-App-Android-Twitter.../twidere/src/main/kotlin/org/mariotaku/ktextension/NumberExtensions.kt

59 lines
1.3 KiB
Kotlin

package org.mariotaku.ktextension
import java.text.NumberFormat
import java.util.*
/**
* Created by mariotaku on 16/7/30.
*/
fun String?.toLongOr(def: Long) = try {
this?.toLong() ?: def
} catch (e: NumberFormatException) {
def
}
fun String?.toIntOr(def: Int) = try {
this?.toInt() ?: def
} catch (e: NumberFormatException) {
def
}
fun String?.toDoubleOr(def: Double) = try {
this?.toDouble() ?: def
} catch (e: NumberFormatException) {
def
}
fun Int.coerceInOr(range: ClosedRange<Int>, def: Int): Int {
if (range.isEmpty()) return def
return coerceIn(range)
}
/**
* Convenience method checking int flags
*/
operator fun Int.contains(i: Int): Boolean = (this and i) == i
/**
* Convenience method checking long flags
*/
operator fun Long.contains(i: Long): Boolean = (this and i) == i
fun Number.toLocalizedString(locale: Locale = Locale.getDefault()): String {
val nf = NumberFormat.getInstance(locale)
return nf.format(this)
}
val Int.nextPowerOf2: Int
get() {
var n = this
if (n <= 0 || n > 1 shl 30) throw IllegalArgumentException("n is invalid: $n")
n -= 1
n = n or (n shr 16)
n = n or (n shr 8)
n = n or (n shr 4)
n = n or (n shr 2)
n = n or (n shr 1)
return n + 1
}