-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSet.go
More file actions
42 lines (33 loc) · 705 Bytes
/
Copy pathSet.go
File metadata and controls
42 lines (33 loc) · 705 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package ruleenginecore
func NewSet[E comparable]() set[E] {
var result set[E]
result.internalMap = make(map[E]bool)
return result
}
type set[E comparable] struct {
internalMap map[E]bool
}
func (s *set[E]) Add(element E) {
s.internalMap[element] = true
}
func (s *set[E]) Remove(element E) {
delete(s.internalMap, element)
}
func (s *set[E]) Contains(element E) bool {
if _, ok := s.internalMap[element]; !ok {
return false
}
return true
}
func (s *set[E]) Elements() []E {
elements := make([]E, len(s.internalMap))
var index int = 0
for key := range s.internalMap {
elements[index] = key
index++
}
return elements
}
func (s *set[E]) Size() int {
return len(s.internalMap)
}