blob: c0626fccba0a5bbe83a87347586b9b2777e67ee1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package at.hannibal2.skyhanni.utils
import kotlin.time.Duration
class TimeLimitedSet<T : Any>(
expireAfterWrite: Duration,
private val removalListener: (T) -> Unit = {},
) {
private val cache = TimeLimitedCache<T, Unit>(expireAfterWrite) { key, _ -> key?.let { removalListener(it) } }
fun add(element: T) {
cache[element] = Unit
}
fun addIfAbsent(element: T) {
if (!contains(element)) add(element)
}
fun remove(element: T) = cache.remove(element)
operator fun contains(element: T): Boolean = cache.containsKey(element)
fun clear() = cache.clear()
fun toSet(): Set<T> = cache.keys().let { keys ->
if (keys.isEmpty()) emptySet() else keys.toSet()
}
}
|