util/set: add a basic map-based Set type

We have two other types of Sets here. Add the basic obvious one too.

Needed for a change elsewhere.

Updates #cleanup

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2023-05-11 14:59:36 -07:00
committed by Brad Fitzpatrick
parent 84c99fe0d9
commit b69059334b
2 changed files with 39 additions and 0 deletions

View File

@@ -4,6 +4,21 @@
// Package set contains set types.
package set
// Set is a set of T.
type Set[T comparable] map[T]struct{}
// Add adds e to the set.
func (s Set[T]) Add(e T) { s[e] = struct{}{} }
// Contains reports whether s contains e.
func (s Set[T]) Contains(e T) bool {
_, ok := s[e]
return ok
}
// Len reports the number of items in s.
func (s Set[T]) Len() int { return len(s) }
// HandleSet is a set of T.
//
// It is not safe for concurrent use.