mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 01:48:04 -04:00
remove unneeded EnumSetUtil code
This commit is contained in:
parent
4850cb09c1
commit
b87c93a97d
@ -13,52 +13,13 @@
|
||||
|
||||
package de.bixilon.minosoft.util
|
||||
|
||||
import de.bixilon.kutil.cast.CastUtil.unsafeCast
|
||||
import de.bixilon.kutil.unsafe.UnsafeUtil
|
||||
import org.objenesis.ObjenesisStd
|
||||
import java.util.*
|
||||
|
||||
|
||||
@Deprecated("kutil 1.24")
|
||||
object EnumSetUtil {
|
||||
private val OBJENSESIS = ObjenesisStd()
|
||||
|
||||
private val ENUM_SET = EnumSet::class.java
|
||||
private val ENUM_SET_TYPE = UnsafeUtil.UNSAFE.objectFieldOffset(ENUM_SET.getDeclaredField("elementType"))
|
||||
private val ENUM_SET_UNIVERSE = UnsafeUtil.UNSAFE.objectFieldOffset(ENUM_SET.getDeclaredField("universe"))
|
||||
|
||||
private val REGULAR_ENUM_SET = Class.forName("java.util.RegularEnumSet")
|
||||
|
||||
private val JUMBO_ENUM_SET = Class.forName("java.util.RegularEnumSet")
|
||||
private val JUMBO_ENUM_SET_ELEMENTS = UnsafeUtil.UNSAFE.objectFieldOffset(JUMBO_ENUM_SET.getDeclaredField("elements"))
|
||||
|
||||
|
||||
private fun <T : Enum<T>> EnumSet<T>.update(type: Class<T>, universe: Array<T>) {
|
||||
UnsafeUtil.UNSAFE.putObject(this, this@EnumSetUtil.ENUM_SET_TYPE, type)
|
||||
UnsafeUtil.UNSAFE.putObject(this, this@EnumSetUtil.ENUM_SET_UNIVERSE, universe)
|
||||
}
|
||||
|
||||
fun <T : Enum<T>> createRegular(clazz: Class<T>, universe: Array<T>): EnumSet<T> {
|
||||
// return RegularEnumSet(clazz, universe)
|
||||
val set = UnsafeUtil.UNSAFE.allocateInstance(REGULAR_ENUM_SET).unsafeCast<EnumSet<T>>()
|
||||
set.update(clazz, universe)
|
||||
|
||||
return set.unsafeCast()
|
||||
}
|
||||
|
||||
fun <T : Enum<T>> createJumbo(clazz: Class<T>, universe: Array<T>): EnumSet<T> {
|
||||
// return JumboEnumSet(clazz, universe)
|
||||
val set = OBJENSESIS.newInstance(REGULAR_ENUM_SET).unsafeCast<EnumSet<T>>()
|
||||
UnsafeUtil.UNSAFE.putObject(this, this@EnumSetUtil.JUMBO_ENUM_SET_ELEMENTS, LongArray(universe.size + 63 ushr 6))
|
||||
|
||||
set.update(clazz, universe)
|
||||
|
||||
|
||||
return set
|
||||
}
|
||||
|
||||
fun <T : Enum<T>> create(clazz: Class<T>, universe: Array<T>): EnumSet<T> {
|
||||
return EnumSet.noneOf(clazz) // TODO: optimize and use universe
|
||||
return if (universe.size <= Long.SIZE_BITS) createRegular(clazz, universe) else createJumbo(clazz, universe)
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
"Hopper": "hopper",
|
||||
"Banner": "banner",
|
||||
"FlowerPot": "flower_pot",
|
||||
"Sign": "sign",
|
||||
"Piston": "piston",
|
||||
"Comparator": "comparator",
|
||||
"unpowered_comparator": "comparator",
|
||||
|
Loading…
x
Reference in New Issue
Block a user