Something went wrong. Try again.
forked from tailscale/tailscale
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829// Copyright (c) Tailscale Inc & contributors// SPDX-License-Identifier: BSD-3-Clause
package mapx
// RepopulateNonzero re-uses an existing map (preserving its allocated// buckets) by zeroing all values, calling populate to re-fill it, and// then deleting any entries still at their zero value. If *m is nil it// is lazily initialized.//// This avoids the allocation cost of creating a new map on every call,// which matters for maps that are rebuilt frequently (e.g. on every// netmap update).func RepopulateNonzero[K comparable, V comparable](m *map[K]V, populate func()) { if *m == nil { *m = make(map[K]V) } var zero V for k := range *m { (*m)[k] = zero } populate() for k, v := range *m { if v == zero { delete(*m, k) } }}