summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt21
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt14
2 files changed, 35 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt
new file mode 100644
index 000000000..8aab176ef
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedCache.kt
@@ -0,0 +1,21 @@
+package at.hannibal2.skyhanni.utils
+
+import com.google.common.cache.CacheBuilder
+import java.util.concurrent.TimeUnit
+import kotlin.time.Duration
+
+class TimeLimitedCache<K, V>(expireAfterWrite: Duration) {
+
+ private val cache = CacheBuilder.newBuilder()
+ .expireAfterWrite(expireAfterWrite.inWholeMilliseconds, TimeUnit.MILLISECONDS).build<K, V>()
+
+ fun put(key: K, value: V) = cache.put(key, value)
+
+ fun getOrNull(key: K): V? = cache.getIfPresent(key)
+
+ fun clear() = cache.invalidateAll()
+
+ fun values(): MutableCollection<V> = cache.asMap().values
+
+ fun containsKey(key: K): Boolean = cache.getIfPresent(key) != null
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt
new file mode 100644
index 000000000..97caf70ad
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeLimitedSet.kt
@@ -0,0 +1,14 @@
+package at.hannibal2.skyhanni.utils
+
+import kotlin.time.Duration
+
+class TimeLimitedSet<T>(expireAfterWrite: Duration) {
+
+ private val cache = TimeLimitedCache<T, Unit>(expireAfterWrite)
+
+ fun add(element: T) = cache.put(element, Unit)
+
+ fun contains(element: T): Boolean = cache.containsKey(element)
+
+ fun clear() = cache.clear()
+}