使い方と制約

予約・転送前にオーバーフロー検査付きで加算します。量は正でLong内に収まる必要があります。桁あふれを負数や切り捨てとして処理せず、エラーにします。

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)
}
ソース

src/main/kotlin/dev/nebulastorage/api/resource/ResourceQuantities.kt; editorial/ja.json

43b4d12d69e6033c24fa8c39dac383ef2429b446