map.go 972 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package generics
  2. import "golang.org/x/exp/constraints"
  3. // Deprecated: Use MakeMapIfNil and MapInsert separately.
  4. func MakeMapIfNilAndSet[K comparable, V any](pm *map[K]V, k K, v V) (added bool) {
  5. MakeMapIfNil(pm)
  6. m := *pm
  7. _, exists := m[k]
  8. added = !exists
  9. m[k] = v
  10. return
  11. }
  12. // Does this exist in the maps package?
  13. func MakeMap[K comparable, V any, M ~map[K]V](pm *M) {
  14. *pm = make(M)
  15. }
  16. func MakeMapWithCap[K comparable, V any, M ~map[K]V, C constraints.Integer](pm *M, cap C) {
  17. *pm = make(M, cap)
  18. }
  19. func MakeMapIfNil[K comparable, V any, M ~map[K]V](pm *M) {
  20. if *pm == nil {
  21. MakeMap(pm)
  22. }
  23. }
  24. func MapContains[K comparable, V any, M ~map[K]V](m M, k K) bool {
  25. _, ok := m[k]
  26. return ok
  27. }
  28. func MapMustGet[K comparable, V any, M ~map[K]V](m M, k K) V {
  29. v, ok := m[k]
  30. if !ok {
  31. panic(k)
  32. }
  33. return v
  34. }
  35. func MapInsert[K comparable, V any, M ~map[K]V](m M, k K, v V) Option[V] {
  36. old, ok := m[k]
  37. m[k] = v
  38. return Option[V]{
  39. Value: old,
  40. Ok: ok,
  41. }
  42. }