Skip to content

Commit

Permalink
Optimize FastSmallSet
Browse files Browse the repository at this point in the history
  • Loading branch information
soywiz committed Jun 28, 2023
1 parent 11459de commit 192c406
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
17 changes: 13 additions & 4 deletions kds/src/commonMain/kotlin/korlibs/datastructure/FastSmallSet.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package korlibs.datastructure

class FastSmallSet<T> : AbstractMutableSet<T>() {
@PublishedApi internal val _items = FastArrayList<T>()
val items: List<T> get() = _items
@PublishedApi internal val _items = LinkedHashSet<T>()
//@PublishedApi internal val _items = FastArrayList<T>()
//val itemsToIndex = LinkedHashMap<T, Int>()
//val items: List<T> get() = _items

override val size: Int get() = _items.size
override fun iterator(): MutableIterator<T> = _items.iterator()
Expand All @@ -13,6 +15,7 @@ class FastSmallSet<T> : AbstractMutableSet<T>() {

override fun add(element: T): Boolean {
if (element in this) return false
//itemsToIndex[element] = _items.size
_items.add(element)
return true
}
Expand All @@ -21,12 +24,16 @@ class FastSmallSet<T> : AbstractMutableSet<T>() {
fast0 = null
fast1 = null
fast2 = null
return _items.remove(element)
//val index = itemsToIndex.remove(element) ?: return false
//_items.removeAt(index)
_items.remove(element)
return true
}

override operator fun contains(element: T): Boolean {
if (element === fast0 || element === fast1 || element === fast0) return true
val result = element in _items
//val result = element in itemsToIndex
if (result) {
fast1 = fast0
fast2 = fast1
Expand All @@ -36,13 +43,15 @@ class FastSmallSet<T> : AbstractMutableSet<T>() {
}

override fun clear() {
//itemsToIndex.clear()
_items.clear()
fast0 = null
fast1 = null
fast2 = null
}

inline fun fastForEach(block: (T) -> Unit) {
_items.fastForEach(block)
_items.forEach { block(it) }
//_items.fastForEach(block)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class AgBufferManager(
}

fun gc() {
delete(referencedBuffersSinceGC.items)
referencedBuffersSinceGC.fastForEach { delete(it) }
referencedBuffersSinceGC.clear()
}

Expand Down

0 comments on commit 192c406

Please sign in to comment.