mirror of https://github.com/portainer/portainer
41 lines
482 B
Go
41 lines
482 B
Go
package set
|
|
|
|
type SetKey interface {
|
|
~int | ~string
|
|
}
|
|
|
|
type Set[T SetKey] map[T]bool
|
|
|
|
func (s Set[T]) Add(key T) {
|
|
s[key] = true
|
|
}
|
|
|
|
func (s Set[T]) Contains(key T) bool {
|
|
_, ok := s[key]
|
|
return ok
|
|
}
|
|
|
|
func (s Set[T]) Remove(key T) {
|
|
delete(s, key)
|
|
}
|
|
|
|
func (s Set[T]) Len() int {
|
|
return len(s)
|
|
}
|
|
|
|
func (s Set[T]) IsEmpty() bool {
|
|
return len(s) == 0
|
|
}
|
|
|
|
func (s Set[T]) Keys() []T {
|
|
keys := make([]T, s.Len())
|
|
|
|
i := 0
|
|
for k := range s {
|
|
keys[i] = k
|
|
i++
|
|
}
|
|
|
|
return keys
|
|
}
|