From 9e052372e6c57afbb2a9fce0303250a1bac60f57 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 14 Oct 2015 14:42:08 +0300 Subject: [PATCH] Make SmartSet smarter --- .../src/org/jetbrains/kotlin/utils/SmartSet.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt index a5bbddef5ee..328db774a66 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/SmartSet.kt @@ -25,22 +25,22 @@ import java.util.* * Also, [iterator] returns an iterator which does not support [MutableIterator.remove]. */ @Suppress("UNCHECKED_CAST") -class SmartSet private constructor() /* : AbstractSet() */ { +class SmartSet private constructor() : AbstractSet() { companion object { private val ARRAY_THRESHOLD = 5 @JvmStatic - fun create(): MutableSet = LinkedHashSet() + fun create() = SmartSet() @JvmStatic - fun create(set: Set): MutableSet = LinkedHashSet(set) + fun create(set: Set) = SmartSet().apply { this.addAll(set) } } // null if size = 0, object if size = 1, array of objects if size < threshold, linked hash set otherwise private var data: Any? = null - private var size: Int = 0 -/* + override var size: Int = 0 + override fun iterator(): MutableIterator = when { size == 0 -> Collections.emptySet().iterator() size == 1 -> SingletonIterator(data as T) @@ -78,15 +78,13 @@ class SmartSet private constructor() /* : AbstractSet() */ { size = 0 } - override fun size(): Int = size - - override fun contains(o: Any?): Boolean = when { + override fun contains(o: T): Boolean = when { size == 0 -> false size == 1 -> data == o size < ARRAY_THRESHOLD -> o in data as Array else -> o in data as Set } -*/ + private class SingletonIterator(private val element: T) : MutableIterator { private var hasNext = true