goext/lang/dataext/syncSet.go

66 lines
940 B
Go
Raw Normal View History

2022-10-27 16:00:57 +02:00
package dataext
import "sync"
type SyncStringSet struct {
data map[string]bool
lock sync.Mutex
}
func (s *SyncStringSet) Add(value string) bool {
s.lock.Lock()
defer s.lock.Unlock()
if s.data == nil {
s.data = make(map[string]bool)
}
_, ok := s.data[value]
s.data[value] = true
return !ok
}
func (s *SyncStringSet) AddAll(values []string) {
s.lock.Lock()
defer s.lock.Unlock()
if s.data == nil {
s.data = make(map[string]bool)
}
for _, value := range values {
s.data[value] = true
}
}
func (s *SyncStringSet) Contains(value string) bool {
s.lock.Lock()
defer s.lock.Unlock()
if s.data == nil {
s.data = make(map[string]bool)
}
_, ok := s.data[value]
return ok
}
func (s *SyncStringSet) Get() []string {
s.lock.Lock()
defer s.lock.Unlock()
if s.data == nil {
s.data = make(map[string]bool)
}
r := make([]string, 0, len(s.data))
for k := range s.data {
r = append(r, k)
}
return r
}