57 lines
978 B
Go
57 lines
978 B
Go
|
package proxyd
|
||
|
|
||
|
import "sync"
|
||
|
|
||
|
type StringSet struct {
|
||
|
underlying map[string]bool
|
||
|
mtx sync.RWMutex
|
||
|
}
|
||
|
|
||
|
func NewStringSet() *StringSet {
|
||
|
return &StringSet{
|
||
|
underlying: make(map[string]bool),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewStringSetFromStrings(in []string) *StringSet {
|
||
|
underlying := make(map[string]bool)
|
||
|
for _, str := range in {
|
||
|
underlying[str] = true
|
||
|
}
|
||
|
return &StringSet{
|
||
|
underlying: underlying,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *StringSet) Has(test string) bool {
|
||
|
s.mtx.RLock()
|
||
|
defer s.mtx.RUnlock()
|
||
|
return s.underlying[test]
|
||
|
}
|
||
|
|
||
|
func (s *StringSet) Add(str string) {
|
||
|
s.mtx.Lock()
|
||
|
defer s.mtx.Unlock()
|
||
|
s.underlying[str] = true
|
||
|
}
|
||
|
|
||
|
func (s *StringSet) Entries() []string {
|
||
|
s.mtx.RLock()
|
||
|
defer s.mtx.RUnlock()
|
||
|
out := make([]string, len(s.underlying))
|
||
|
var i int
|
||
|
for entry := range s.underlying {
|
||
|
out[i] = entry
|
||
|
i++
|
||
|
}
|
||
|
return out
|
||
|
}
|
||
|
|
||
|
func (s *StringSet) Extend(in []string) *StringSet {
|
||
|
out := NewStringSetFromStrings(in)
|
||
|
for k := range s.underlying {
|
||
|
out.Add(k)
|
||
|
}
|
||
|
return out
|
||
|
}
|