From 36b2f0670cba9110d9c1f933358cfdd3c7c9ec3d Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 3 Feb 2024 18:04:01 +0700 Subject: [PATCH] Bring back fastutil usage --- .../kommons/networking/FieldSynchronizer.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/kommons/networking/FieldSynchronizer.kt b/src/main/kotlin/ru/dbotthepony/kommons/networking/FieldSynchronizer.kt index 131cd2c..524a400 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/networking/FieldSynchronizer.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/networking/FieldSynchronizer.kt @@ -2,6 +2,9 @@ package ru.dbotthepony.kommons.networking +import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction +import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap +import it.unimi.dsi.fastutil.objects.ReferenceArraySet import ru.dbotthepony.kommons.collect.ProxiedMap import ru.dbotthepony.kommons.collect.forValidRefs import ru.dbotthepony.kommons.event.IBooleanSubscriptable @@ -320,11 +323,11 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa } } - private val dirtyFields = LinkedHashSet>() + private val dirtyFields = ReferenceArraySet>(4) // use LinkedList because it is ensured memory is freed on LinkedList#clear - private val mapBacklogs = IdentityHashMap, LinkedList Unit>>>() - private val setBacklogs = IdentityHashMap, LinkedList Unit>>>() + private val mapBacklogs = Reference2ObjectOpenHashMap, LinkedList Unit>>>() + private val setBacklogs = Reference2ObjectOpenHashMap, LinkedList Unit>>>() var unused: Boolean = false private set @@ -372,9 +375,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa return LinkedList() } - return mapBacklogs.computeIfAbsent(map) { + return mapBacklogs.computeIfAbsent(map, Reference2ObjectFunction { LinkedList() - } + }) } internal fun removeMapBacklog(map: Map) { @@ -386,9 +389,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa return LinkedList() } - return setBacklogs.computeIfAbsent(set) { + return setBacklogs.computeIfAbsent(set, Reference2ObjectFunction { LinkedList() - } + }) } internal fun removeSetBacklog(set: Set) {