-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathmap.go
More file actions
93 lines (69 loc) · 1.46 KB
/
map.go
File metadata and controls
93 lines (69 loc) · 1.46 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package mapset
import (
"github.com/emirpasic/gods/trees/btree"
"github.com/emirpasic/gods/utils"
)
type Map interface {
Put(k, v interface{}) bool
Get(k interface{}) (interface{}, bool)
Remove(k interface{})
Contains(k ...interface{}) bool
Each(func(k, v interface{}) int)
Keys() []interface{}
Values() []interface{}
Size() int
Clear()
String() string
}
func NewBytesMap() Map {
return NewMapWithComparator(utils.ByteComparator)
}
func NewMapWithComparator(cmp func(a, b interface{}) int) Map {
m := &btreeMap{
inner: btree.NewWith(10, cmp),
}
return m
}
type btreeMap struct {
inner *btree.Tree
cmp func(a, b interface{}) int
}
func (m btreeMap) Each(f func(k, v interface{}) int) {
it := m.inner.Iterator()
for it.Next() {
f(it.Key(), it.Value())
}
}
func (m *btreeMap) Put(k, v interface{}) bool {
m.inner.Put(k, v)
return true
}
func (m btreeMap) Get(k interface{}) (interface{}, bool) {
return m.inner.Get(k)
}
func (m *btreeMap) Remove(k interface{}) {
m.inner.Remove(k)
}
func (b *btreeMap) Contains(k ...interface{}) bool {
for _, n := range k {
if _, exists := b.inner.Get(n); exists {
return true
}
}
return false
}
func (m *btreeMap) Clear() {
m.inner.Clear()
}
func (m btreeMap) Size() int {
return m.inner.Size()
}
func (m btreeMap) Keys() []interface{} {
return m.inner.Keys()
}
func (m btreeMap) Values() []interface{} {
return m.inner.Values()
}
func (m btreeMap) String() string {
return m.inner.String()
}