diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt | 4 | ||||
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt | 8 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt index e17389c52..018c858fa 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt @@ -4,10 +4,10 @@ import com.google.common.cache.CacheBuilder import java.util.concurrent.TimeUnit import kotlin.time.Duration -class TimeLimitedCache<K: Any, V: Any>( +class TimeLimitedCache<K : Any, V : Any>( expireAfterWrite: Duration, private val removalListener: (K?, V?) -> Unit = { _, _ -> }, -): Iterable<Map.Entry<K, V>> { +) : Iterable<Map.Entry<K, V>> { private val cache = CacheBuilder.newBuilder() .expireAfterWrite(expireAfterWrite.inWholeMilliseconds, TimeUnit.MILLISECONDS) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt index c0626fccb..4c4a35151 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt @@ -5,7 +5,7 @@ import kotlin.time.Duration class TimeLimitedSet<T : Any>( expireAfterWrite: Duration, private val removalListener: (T) -> Unit = {}, -) { +) : Iterable<T> { private val cache = TimeLimitedCache<T, Unit>(expireAfterWrite) { key, _ -> key?.let { removalListener(it) } } @@ -13,12 +13,16 @@ class TimeLimitedSet<T : Any>( cache[element] = Unit } + operator fun plusAssign(element: T) = add(element) + fun addIfAbsent(element: T) { if (!contains(element)) add(element) } fun remove(element: T) = cache.remove(element) + operator fun minusAssign(element: T) = remove(element) + operator fun contains(element: T): Boolean = cache.containsKey(element) fun clear() = cache.clear() @@ -26,4 +30,6 @@ class TimeLimitedSet<T : Any>( fun toSet(): Set<T> = cache.keys().let { keys -> if (keys.isEmpty()) emptySet() else keys.toSet() } + + override fun iterator(): Iterator<T> = toSet().iterator() } |
