-
Notifications
You must be signed in to change notification settings - Fork 0
/
mapbuilder.go
66 lines (55 loc) · 1.26 KB
/
mapbuilder.go
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
/*
See also maps/builder.go
*/
package container
import (
bt "github.com/wrmsr/bane/core/types"
)
type MapBuilder[K comparable, V any] struct {
m *SliceMap[K, V]
}
func NewMapBuilder[K comparable, V any]() *MapBuilder[K, V] {
return &MapBuilder[K, V]{
m: &SliceMap[K, V]{
m: make(map[K]int),
},
}
}
func (b *MapBuilder[K, V]) Put(k K, v V) *MapBuilder[K, V] {
b.m.put(k, v)
return b
}
func (b *MapBuilder[K, V]) Update(it bt.Iterable[bt.Kv[K, V]]) *MapBuilder[K, V] {
if it != nil {
for it := it.Iterate(); it.HasNext(); {
kv := it.Next()
b.m.put(kv.K, kv.V)
}
}
return b
}
func (b *MapBuilder[K, V]) Filter(fn func(kv bt.Kv[K, V]) bool) *MapBuilder[K, V] {
b.m.filter(fn)
return b
}
func (b *MapBuilder[K, V]) FilterKeys(fn func(k K) bool) *MapBuilder[K, V] {
b.m.filter(func(kv bt.Kv[K, V]) bool { return fn(kv.K) })
return b
}
func (b *MapBuilder[K, V]) FilterValues(fn func(v V) bool) *MapBuilder[K, V] {
b.m.filter(func(kv bt.Kv[K, V]) bool { return fn(kv.V) })
return b
}
func (b *MapBuilder[K, V]) Delete(k K) *MapBuilder[K, V] {
b.m.delete(k)
return b
}
func (b *MapBuilder[K, V]) Default(k K, v V) *MapBuilder[K, V] {
b.m.default_(k, v)
return b
}
func (b *MapBuilder[K, V]) Build() OrderedMap[K, V] {
r := b.m
b.m = nil
return r
}