optimize registries after loading

This could/should make performance better?
This commit is contained in:
Bixilon 2023-05-28 00:42:06 +02:00
parent d95e508219
commit 42a94ab3d1
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
7 changed files with 31 additions and 2 deletions

View File

@ -22,7 +22,7 @@ import de.bixilon.minosoft.data.registries.registries.registry.Registry
class BlockEntityTypeRegistry(
parentRegistry: BlockEntityTypeRegistry? = null,
) : Registry<BlockEntityType<*>>(parentRegistry, codec = BlockEntityType) {
private val blockTypeMap: MutableMap<Block, BlockEntityType<*>> = mutableMapOf()
private val blockTypeMap: MutableMap<Block, BlockEntityType<*>> = HashMap()
operator fun get(block: Block): BlockEntityType<*>? {
val parentRegistry = super.parent as BlockEntityTypeRegistry?

View File

@ -48,4 +48,6 @@ interface AbstractRegistry<T> : Iterable<T>, Clearable, Parentable<AbstractRegis
override fun iterator(): Iterator<T> {
return RegistryIterator(this)
}
fun optimize() = Unit
}

View File

@ -86,4 +86,8 @@ class BlockStateRegistry(var flattened: Boolean) : AbstractRegistry<BlockState?>
}
override fun addItem(resourceLocation: ResourceLocation, id: Int?, data: JsonObject, registries: Registries?) = Broken()
override fun optimize() {
idMap.trim()
}
}

View File

@ -36,7 +36,7 @@ open class Registry<T : RegistryItem>(
) : AbstractRegistry<T> {
protected val idValueMap: Int2ObjectOpenHashMap<T> = Int2ObjectOpenHashMap()
protected val valueIdMap: Object2IntOpenHashMap<T> = Object2IntOpenHashMap()
protected val resourceLocationMap: MutableMap<ResourceLocation, T> = mutableMapOf()
protected val resourceLocationMap: MutableMap<ResourceLocation, T> = HashMap()
override val size: Int
get() {
@ -158,4 +158,9 @@ open class Registry<T : RegistryItem>(
override fun noParentIterator(): Iterator<T> {
return resourceLocationMap.values.iterator()
}
override fun optimize() {
idValueMap.trim()
valueIdMap.trim()
}
}

View File

@ -81,4 +81,9 @@ class ResourceLocationRegistry(
override fun noParentIterator(): Iterator<ResourceLocation> {
return idValueMap.values.iterator()
}
override fun optimize() {
idValueMap.trim()
valueIdMap.trim()
}
}

View File

@ -81,4 +81,9 @@ class RecipeRegistry(
recipeResourceLocationMap[recipe] = resourceLocation
}
}
override fun optimize() {
idValueMap.trim()
valueIdMap.trim()
}
}

View File

@ -81,6 +81,14 @@ object RegistriesUtil {
worker.work(latch)
}
fun Registries.optimize(latch: CountUpAndDownLatch) {
val worker = UnconditionalWorker()
for (field in types.values) {
worker += { field.get(this).unsafeCast<Registry<*>>().optimize() }
}
worker.work(latch)
}
fun Registries.clear() {
for (field in clearable) {