39 lines
1,010 B
Kotlin
39 lines
1,010 B
Kotlin
@file:Suppress("DuplicatedCode")
|
|
|
|
package space.blokk.util
|
|
|
|
fun IntArray.toCompactLongArray(bitsPerEntry: Int): LongArray {
|
|
val itemsPerLong = Long.SIZE_BITS / bitsPerEntry
|
|
val array = LongArray(size / itemsPerLong)
|
|
|
|
var totalIndex = 0
|
|
for(longIndex in array.indices) {
|
|
var long: Long = 0
|
|
for (index in 0 until itemsPerLong) {
|
|
long = (get(totalIndex).toLong() shl (index * bitsPerEntry)) or long
|
|
totalIndex++
|
|
}
|
|
|
|
array[longIndex] = long
|
|
}
|
|
|
|
return array
|
|
}
|
|
|
|
fun ByteArray.toCompactLongArray(bitsPerEntry: Int): LongArray {
|
|
val itemsPerLong = Long.SIZE_BITS / bitsPerEntry
|
|
val array = LongArray(size / itemsPerLong)
|
|
|
|
var totalIndex = 0
|
|
for(longIndex in array.indices) {
|
|
var long: Long = 0
|
|
for (index in 0 until itemsPerLong) {
|
|
long = (get(totalIndex).toLong() shl (index * bitsPerEntry)) or long
|
|
totalIndex++
|
|
}
|
|
|
|
array[longIndex] = long
|
|
}
|
|
|
|
return array
|
|
}
|