distribution/vendor/github.com/anacrolix/generics/map.go

51 lines
972 B
Go

package generics
import "golang.org/x/exp/constraints"
// Deprecated: Use MakeMapIfNil and MapInsert separately.
func MakeMapIfNilAndSet[K comparable, V any](pm *map[K]V, k K, v V) (added bool) {
MakeMapIfNil(pm)
m := *pm
_, exists := m[k]
added = !exists
m[k] = v
return
}
// Does this exist in the maps package?
func MakeMap[K comparable, V any, M ~map[K]V](pm *M) {
*pm = make(M)
}
func MakeMapWithCap[K comparable, V any, M ~map[K]V, C constraints.Integer](pm *M, cap C) {
*pm = make(M, cap)
}
func MakeMapIfNil[K comparable, V any, M ~map[K]V](pm *M) {
if *pm == nil {
MakeMap(pm)
}
}
func MapContains[K comparable, V any, M ~map[K]V](m M, k K) bool {
_, ok := m[k]
return ok
}
func MapMustGet[K comparable, V any, M ~map[K]V](m M, k K) V {
v, ok := m[k]
if !ok {
panic(k)
}
return v
}
func MapInsert[K comparable, V any, M ~map[K]V](m M, k K, v V) Option[V] {
old, ok := m[k]
m[k] = v
return Option[V]{
Value: old,
Ok: ok,
}
}