Uso y límites
Suma cantidades con control de desbordamiento antes de reservar o transferir. Deben ser positivas y caber en Long. Nunca trunques ni aceptes valores negativos por overflow.
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)
}
Fuente
src/main/kotlin/dev/nebulastorage/api/resource/ResourceQuantities.kt; editorial/es.json
43b4d12d69e6033c24fa8c39dac383ef2429b446