Verwendung und Grenzen
Addiert Mengen mit Überlaufprüfung vor Reservierung und Transfer. Mengen sind positiv und passen in Long. Ein Überlauf muss als Fehler behandelt werden.
ResourceQuantities
package dev.nebulastorage.api.resource
import dev.nebulastorage.api.resource.ResourceKey
import dev.nebulastorage.api.resource.ResourceStack
import java.util.Collections
internal fun quantities(stacks: Iterable<ResourceStack>): Map<ResourceKey, Long> {
val result = mutableMapOf<ResourceKey, Long>()
for (stack in stacks) result.addExact(stack.key, stack.amount)
return immutableQuantities(result)
}
internal fun immutableQuantities(values: Map<ResourceKey, Long>): Map<ResourceKey, Long> {
require(values.values.all { it > 0 }) { "Quantities must be positive" }
return Collections.unmodifiableMap(values.toMap())
}
internal fun MutableMap<ResourceKey, Long>.addExact(key: ResourceKey, amount: Long) {
val updated = Math.addExact(getOrDefault(key, 0), amount)
require(updated >= 0) { "Insufficient quantity for $key" }
if (updated == 0L) remove(key) else put(key, updated)
}
Quelle
src/main/kotlin/dev/nebulastorage/api/resource/ResourceQuantities.kt; editorial/de.json
43b4d12d69e6033c24fa8c39dac383ef2429b446