Ayfri
12/15/2021, 9:30 AMdata class Zone(x: IntRange, y: IntRange, z: IntRange)
and
data class Zone(x1: Int, y1: Int, z1: Int, x2: Int, y2: Int, z2: Int)
?
And would it impact performances to use Ranges ?
I only need like 50 zones maximum for my projectMatteo Mirk
12/15/2021, 9:36 AMRob Elliot
12/15/2021, 9:36 AMMatteo Mirk
12/15/2021, 9:39 AMxRange
or xSpan
, etc. for exampleAyfri
12/15/2021, 9:43 AMYoussef Shoaib [MOD]
12/16/2021, 7:59 PM@JvmInline
value class MyIntRange private constructor(private val underlying: Long) {
constructor(start: Int, end: Int) : this(packStartWithEnd(start, end))
val start: Int
get() = unpackStart(underlying)
val end: Int
get() = unpackEnd(underlying)
fun copy(
start: Int = this.start,
end: Int = this.end
): MyIntRange =
MyIntRange(start, end)
}
private fun packStartWithEnd(start: Int, end: Int): Long =
(start.toLong() shl Int.SIZE_BITS) or (end.toLong() and 0xffffffffL)
private fun unpackStart(packed: Long): Int =
(packed shr Int.SIZE_BITS).toInt()
private fun unpackEnd(packed: Long): Int =
packed.toInt()
fun main(){
// Poor man's unit tests
val range = MyIntRange(20, 45)
val newRange = range.copy(end = 42)
println(range.start == 20)
println(range.end == 45)
println(newRange.start == 20)
println(newRange.end == 42)
}