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

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