diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt index a7888bebf..d6b6fdc3c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/ReferenceHashStrategy.kt @@ -4,42 +4,15 @@ import it.unimi.dsi.fastutil.Hash import java.lang.ref.Reference object ReferenceHashStrategy : Hash.Strategy { - @Suppress("UNCHECKED_CAST") override fun equals(a: Any?, b: Any?): Boolean { if (a === b) return true + if (a == null || b == null) return false if (a is Reference<*>) { - if (a.refersTo(null) || b == null) return false - - if (b is Reference<*>) { - if (b.refersTo(null)) return false - return (b as Reference).refersTo(a.get() ?: return false) - } else { - return (a as Reference).refersTo(b) - } + if (b is Reference<*>) return a.get() == b.get() + return a.get() == b } else if (b is Reference<*>) { - if (b.refersTo(null) || a == null) return false - return (b as Reference).refersTo(a) - } - - return a == b - } - - override fun hashCode(o: Any?): Int { - return o.hashCode() - } -} - -object StrictReferenceHashStrategy : Hash.Strategy { - @Suppress("UNCHECKED_CAST") - override fun equals(a: Any?, b: Any?): Boolean { - if (a === b) return true - - if (a is Reference<*>) { - if (b is Reference<*>) return false - return b != null && (a as Reference).refersTo(b) - } else if (b is Reference<*>) { - return a != null && (b as Reference).refersTo(a) + return b.get() == a } else { return a == b } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt index 6279aedfe..6464b7d87 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/collect/WeakHashSet.kt @@ -8,7 +8,7 @@ import java.lang.ref.ReferenceQueue class WeakHashSet(initialCapacity: Int = 16, loadFactor: Float = 0.75f, linked: Boolean = false) : MutableSet { private val queue = ReferenceQueue() - private val backing: ObjectSet = if (linked) ObjectLinkedOpenCustomHashSet(initialCapacity, loadFactor, StrictReferenceHashStrategy) else ObjectOpenCustomHashSet(initialCapacity, loadFactor, StrictReferenceHashStrategy) + private val backing: ObjectSet = if (linked) ObjectLinkedOpenCustomHashSet(initialCapacity, loadFactor, ReferenceHashStrategy) else ObjectOpenCustomHashSet(initialCapacity, loadFactor, ReferenceHashStrategy) private fun purge() { var next = queue.poll()