diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeCache.kt b/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeCache.kt index 4254d94bf..962932c9a 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeCache.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeCache.kt @@ -23,7 +23,7 @@ package com.vitorpamplona.quartz.utils import java.util.concurrent.ConcurrentSkipListMap import java.util.function.BiConsumer -class LargeCache { +class LargeCache : CacheOperations { private val cache = ConcurrentSkipListMap() fun keys() = cache.keys @@ -34,7 +34,7 @@ class LargeCache { fun remove(key: K) = cache.remove(key) - fun size() = cache.size + override fun size() = cache.size fun isEmpty() = cache.isEmpty() @@ -76,155 +76,7 @@ class LargeCache { } } - fun forEach(consumer: BiConsumer) { - innerForEach(consumer) - } - - fun filter(consumer: CacheCollectors.BiFilter): List { - val runner = CacheCollectors.BiFilterCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun filterIntoSet(consumer: CacheCollectors.BiFilter): Set { - val runner = CacheCollectors.BiFilterUniqueCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun map(consumer: CacheCollectors.BiNotNullMapper): List { - val runner = CacheCollectors.BiNotNullMapCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapNotNull(consumer: CacheCollectors.BiMapper): List { - val runner = CacheCollectors.BiMapCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapNotNullIntoSet(consumer: CacheCollectors.BiMapper): Set { - val runner = CacheCollectors.BiMapUniqueCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapFlatten(consumer: CacheCollectors.BiMapper?>): List { - val runner = CacheCollectors.BiMapFlattenCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapFlattenIntoSet(consumer: CacheCollectors.BiMapper?>): Set { - val runner = CacheCollectors.BiMapFlattenUniqueCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun maxOrNullOf( - filter: CacheCollectors.BiFilter, - comparator: Comparator, - ): V? { - val runner = CacheCollectors.BiMaxOfCollector(filter, comparator) - innerForEach(runner) - return runner.maxV - } - - fun sumOf(consumer: CacheCollectors.BiSumOf): Int { - val runner = CacheCollectors.BiSumOfCollector(consumer) - innerForEach(runner) - return runner.sum - } - - fun sumOfLong(consumer: CacheCollectors.BiSumOfLong): Long { - val runner = CacheCollectors.BiSumOfLongCollector(consumer) - innerForEach(runner) - return runner.sum - } - - fun groupBy(consumer: CacheCollectors.BiNotNullMapper): Map> { - val runner = CacheCollectors.BiGroupByCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun countByGroup(consumer: CacheCollectors.BiNotNullMapper): Map { - val runner = CacheCollectors.BiCountByGroupCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun sumByGroup( - groupMap: CacheCollectors.BiNotNullMapper, - sumOf: CacheCollectors.BiNotNullMapper, - ): Map { - val runner = CacheCollectors.BiSumByGroupCollector(groupMap, sumOf) - innerForEach(runner) - return runner.results - } - - fun count(consumer: CacheCollectors.BiFilter): Int { - val runner = CacheCollectors.BiCountIfCollector(consumer) - innerForEach(runner) - return runner.count - } - - fun associate(transform: (K, V) -> Pair): Map { - val runner = CacheCollectors.BiAssociateCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - fun associateNotNull(transform: (K, V) -> Pair?): Map { - val runner = CacheCollectors.BiAssociateNotNullCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - fun associateWith(transform: (K, V) -> U?): Map { - val runner = CacheCollectors.BiAssociateWithCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - fun associateNotNullWith(transform: (K, V) -> U): Map { - val runner = CacheCollectors.BiAssociateNotNullWithCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - private fun innerForEach(runner: BiConsumer) { - cache.forEach(runner) - } - - fun joinToString( - separator: CharSequence = ", ", - prefix: CharSequence = "", - postfix: CharSequence = "", - limit: Int = -1, - truncated: CharSequence = "...", - transform: ((K, V) -> CharSequence)? = null, - ): String { - val buffer = StringBuilder() - buffer.append(prefix) - var count = 0 - forEach { key, value -> - val str = if (transform != null) transform(key, value) else "" - if (str.isNotEmpty()) { - if (++count > 1) buffer.append(separator) - if (limit < 0 || count <= limit) { - when { - transform != null -> buffer.append(str) - else -> buffer.append("$key $value") - } - } else { - return@forEach - } - } - } - if (limit >= 0 && count > limit) buffer.append(truncated) - buffer.append(postfix) - return buffer.toString() + override fun forEach(consumer: BiConsumer) { + cache.forEach(consumer) } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeSoftCache.kt b/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeSoftCache.kt index 6f1c90c55..17f9ba265 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeSoftCache.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/utils/LargeSoftCache.kt @@ -24,7 +24,7 @@ import java.lang.ref.WeakReference import java.util.concurrent.ConcurrentSkipListMap import java.util.function.BiConsumer -class LargeSoftCache { +class LargeSoftCache : CacheOperations { private val cache = ConcurrentSkipListMap>() fun keys() = cache.keys @@ -43,7 +43,7 @@ class LargeSoftCache { fun remove(key: K) = cache.remove(key) - fun size() = cache.size + override fun size() = cache.size fun isEmpty() = cache.isEmpty() @@ -122,156 +122,8 @@ class LargeSoftCache { println("Cache cleanup completed. Remaining size: ${cache.size}") } - fun forEach(consumer: BiConsumer) { - innerForEach(consumer) - } - - fun filter(consumer: CacheCollectors.BiFilter): List { - val runner = CacheCollectors.BiFilterCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun filterIntoSet(consumer: CacheCollectors.BiFilter): Set { - val runner = CacheCollectors.BiFilterUniqueCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun map(consumer: CacheCollectors.BiNotNullMapper): List { - val runner = CacheCollectors.BiNotNullMapCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapNotNull(consumer: CacheCollectors.BiMapper): List { - val runner = CacheCollectors.BiMapCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapNotNullIntoSet(consumer: CacheCollectors.BiMapper): Set { - val runner = CacheCollectors.BiMapUniqueCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapFlatten(consumer: CacheCollectors.BiMapper?>): List { - val runner = CacheCollectors.BiMapFlattenCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun mapFlattenIntoSet(consumer: CacheCollectors.BiMapper?>): Set { - val runner = CacheCollectors.BiMapFlattenUniqueCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun maxOrNullOf( - filter: CacheCollectors.BiFilter, - comparator: Comparator, - ): V? { - val runner = CacheCollectors.BiMaxOfCollector(filter, comparator) - innerForEach(runner) - return runner.maxV - } - - fun sumOf(consumer: CacheCollectors.BiSumOf): Int { - val runner = CacheCollectors.BiSumOfCollector(consumer) - innerForEach(runner) - return runner.sum - } - - fun sumOfLong(consumer: CacheCollectors.BiSumOfLong): Long { - val runner = CacheCollectors.BiSumOfLongCollector(consumer) - innerForEach(runner) - return runner.sum - } - - fun groupBy(consumer: CacheCollectors.BiNotNullMapper): Map> { - val runner = CacheCollectors.BiGroupByCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun countByGroup(consumer: CacheCollectors.BiNotNullMapper): Map { - val runner = CacheCollectors.BiCountByGroupCollector(consumer) - innerForEach(runner) - return runner.results - } - - fun sumByGroup( - groupMap: CacheCollectors.BiNotNullMapper, - sumOf: CacheCollectors.BiNotNullMapper, - ): Map { - val runner = CacheCollectors.BiSumByGroupCollector(groupMap, sumOf) - innerForEach(runner) - return runner.results - } - - fun count(consumer: CacheCollectors.BiFilter): Int { - val runner = CacheCollectors.BiCountIfCollector(consumer) - innerForEach(runner) - return runner.count - } - - fun associate(transform: (K, V) -> Pair): Map { - val runner = CacheCollectors.BiAssociateCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - fun associateNotNull(transform: (K, V) -> Pair?): Map { - val runner = CacheCollectors.BiAssociateNotNullCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - fun associateWith(transform: (K, V) -> U?): Map { - val runner = CacheCollectors.BiAssociateWithCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - fun associateNotNullWith(transform: (K, V) -> U): Map { - val runner = CacheCollectors.BiAssociateNotNullWithCollector(size(), transform) - innerForEach(runner) - return runner.results - } - - private fun innerForEach(runner: BiConsumer) { - cache.forEach(BiConsumerWrapper(this, runner)) - } - - fun joinToString( - separator: CharSequence = ", ", - prefix: CharSequence = "", - postfix: CharSequence = "", - limit: Int = -1, - truncated: CharSequence = "...", - transform: ((K, V) -> CharSequence)? = null, - ): String { - val buffer = StringBuilder() - buffer.append(prefix) - var count = 0 - forEach { key, value -> - val str = if (transform != null) transform(key, value) else "" - if (str.isNotEmpty()) { - if (++count > 1) buffer.append(separator) - if (limit < 0 || count <= limit) { - when { - transform != null -> buffer.append(str) - else -> buffer.append("$key $value") - } - } else { - return@forEach - } - } - } - if (limit >= 0 && count > limit) buffer.append(truncated) - buffer.append(postfix) - return buffer.toString() + override fun forEach(consumer: BiConsumer) { + cache.forEach(BiConsumerWrapper(this, consumer)) } class BiConsumerWrapper(