Refactoring the DVM codebase

Allows pull to refresh to request the job again.
This commit is contained in:
Vitor Pamplona
2024-05-17 17:02:04 -04:00
parent 8b052567c4
commit 9fb8d4821e
16 changed files with 335 additions and 329 deletions

View File

@@ -103,6 +103,15 @@ class LargeCache<K, V> {
return runner.results
}
fun maxOrNullOf(
filter: BiFilter<K, V>,
comparator: Comparator<V>,
): V? {
val runner = BiMaxOfCollector(filter, comparator)
innerForEach(runner)
return runner.maxV
}
fun sumOf(consumer: BiSumOf<K, V>): Int {
val runner = BiSumOfCollector(consumer)
innerForEach(runner)
@@ -263,6 +272,23 @@ fun interface BiSumOf<K, V> {
): Int
}
class BiMaxOfCollector<K, V>(val filter: BiFilter<K, V>, val comparator: Comparator<V>) : BiConsumer<K, V> {
var maxK: K? = null
var maxV: V? = null
override fun accept(
k: K,
v: V,
) {
if (filter.filter(k, v)) {
if (maxK == null || comparator.compare(v, maxV) > 1) {
maxK = k
maxV = v
}
}
}
}
class BiSumOfCollector<K, V>(val mapper: BiSumOf<K, V>) : BiConsumer<K, V> {
var sum = 0