Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitgetLimited
GitHub Repository: BitgetLimited/V3-bitget-api-sdk
Path: blob/master/bitget-golang-sdk-api/internal/model/set.go
735 views
1
package model
2
3
import (
4
"sync"
5
)
6
7
type inter interface{}
8
9
type Set struct {
10
m map[inter]bool
11
sync.RWMutex
12
}
13
14
func NewSet() *Set {
15
return &Set{
16
m: map[inter]bool{},
17
}
18
}
19
func (s *Set) Add(item inter) {
20
s.Lock()
21
defer s.Unlock()
22
s.m[item] = true
23
}
24
func (s *Set) Remove(item inter) {
25
s.Lock()
26
s.Unlock()
27
delete(s.m, item)
28
}
29
func (s *Set) Has(item inter) bool {
30
s.RLock()
31
defer s.RUnlock()
32
_, ok := s.m[item]
33
return ok
34
}
35
func (s *Set) Len() int {
36
return len(s.List())
37
}
38
func (s *Set) Clear() {
39
s.Lock()
40
defer s.Unlock()
41
s.m = map[inter]bool{}
42
}
43
func (s *Set) IsEmpty() bool {
44
if s.Len() == 0 {
45
return true
46
}
47
return false
48
}
49
func (s *Set) List() []inter {
50
s.RLock()
51
defer s.RUnlock()
52
list := []inter{}
53
for item := range s.m {
54
list = append(list, item)
55
}
56
return list
57
}
58
59