mirror of https://github.com/knative/func.git
46 lines
770 B
Go
46 lines
770 B
Go
package utils
|
|
|
|
import (
|
|
"sort"
|
|
"sync"
|
|
)
|
|
|
|
// sorted set of strings.
|
|
//
|
|
// write-optimized and suitable only for fairly small values of N.
|
|
// Should this increase dramatically in size, a different implementation,
|
|
// such as a linked list, might be more appropriate.
|
|
type sortedSet struct {
|
|
members map[string]bool
|
|
sync.Mutex
|
|
}
|
|
|
|
func NewSortedSet() *sortedSet {
|
|
return &sortedSet{
|
|
members: make(map[string]bool),
|
|
}
|
|
}
|
|
|
|
func (s *sortedSet) Add(value string) {
|
|
s.Lock()
|
|
s.members[value] = true
|
|
s.Unlock()
|
|
}
|
|
|
|
func (s *sortedSet) Remove(value string) {
|
|
s.Lock()
|
|
delete(s.members, value)
|
|
s.Unlock()
|
|
}
|
|
|
|
func (s *sortedSet) Items() []string {
|
|
s.Lock()
|
|
defer s.Unlock()
|
|
n := []string{}
|
|
for k := range s.members {
|
|
n = append(n, k)
|
|
}
|
|
sort.Strings(n)
|
|
return n
|
|
}
|