syft/internal/stringset.go

62 lines
1.1 KiB
Go
Raw Normal View History

2020-06-04 18:42:59 +00:00
package internal
import "sort"
// StringSet represents a set of string types.
2020-07-07 22:04:27 +00:00
type StringSet map[string]struct{}
2020-06-04 18:42:59 +00:00
// NewStringSet creates a new empty StringSet.
func NewStringSet(start ...string) StringSet {
2020-07-07 22:04:27 +00:00
ret := make(StringSet)
2020-06-04 18:42:59 +00:00
for _, s := range start {
ret.Add(s)
}
return ret
}
// Add a string to the set.
func (s StringSet) Add(i ...string) {
for _, str := range i {
s[str] = struct{}{}
}
2020-06-04 18:42:59 +00:00
}
// Remove a string from the set.
2020-07-07 22:04:27 +00:00
func (s StringSet) Remove(i string) {
2020-06-04 18:42:59 +00:00
delete(s, i)
}
// Contains indicates if the given string is contained within the set.
2020-07-07 22:04:27 +00:00
func (s StringSet) Contains(i string) bool {
2020-06-04 18:42:59 +00:00
_, ok := s[i]
return ok
}
// ToSlice returns a sorted slice of strings that are contained within the set.
func (s StringSet) ToSlice() []string {
ret := make([]string, len(s))
idx := 0
for v := range s {
ret[idx] = v
idx++
}
sort.Strings(ret)
return ret
}
func (s StringSet) Equals(o StringSet) bool {
if len(s) != len(o) {
return false
}
for k := range s {
if !o.Contains(k) {
return false
}
}
return true
}
func (s StringSet) Empty() bool {
return len(s) < 1
}