package internal

type StringSet map[string]struct{}

func NewStringSet() StringSet {
	return make(StringSet)
}

func NewStringSetFromSlice(start []string) StringSet {
	ret := make(StringSet)
	for _, s := range start {
		ret.Add(s)
	}
	return ret
}

func (s StringSet) Add(i string) {
	s[i] = struct{}{}
}

func (s StringSet) Remove(i string) {
	delete(s, i)
}

func (s StringSet) Contains(i string) bool {
	_, ok := s[i]
	return ok
}

func (s StringSet) ToSlice() []string {
	ret := make([]string, len(s))
	idx := 0
	for v := range s {
		ret[idx] = v
		idx++
	}
	return ret
}
