mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-09 18:33:36 +02:00
initial gotify support
This commit is contained in:
@@ -114,9 +114,9 @@ func (m Map[KT, VT]) RangeAll(do func(k KT, v VT)) {
|
||||
// nothing
|
||||
func (m Map[KT, VT]) RangeAllParallel(do func(k KT, v VT)) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(m.Size())
|
||||
|
||||
m.Range(func(k KT, v VT) bool {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
do(k, v)
|
||||
wg.Done()
|
||||
|
||||
59
internal/utils/functional/set.go
Normal file
59
internal/utils/functional/set.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package functional
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/puzpuzpuz/xsync/v3"
|
||||
)
|
||||
|
||||
type Set[T comparable] struct {
|
||||
m *xsync.MapOf[T, struct{}]
|
||||
}
|
||||
|
||||
func NewSet[T comparable]() Set[T] {
|
||||
return Set[T]{m: xsync.NewMapOf[T, struct{}]()}
|
||||
}
|
||||
|
||||
func (set Set[T]) Add(v T) {
|
||||
set.m.Store(v, struct{}{})
|
||||
}
|
||||
|
||||
func (set Set[T]) Remove(v T) {
|
||||
set.m.Delete(v)
|
||||
}
|
||||
|
||||
func (set Set[T]) Contains(v T) bool {
|
||||
_, ok := set.m.Load(v)
|
||||
return ok
|
||||
}
|
||||
|
||||
func (set Set[T]) Range(f func(T) bool) {
|
||||
set.m.Range(func(k T, _ struct{}) bool {
|
||||
return f(k)
|
||||
})
|
||||
}
|
||||
|
||||
func (set Set[T]) RangeAll(f func(T)) {
|
||||
set.m.Range(func(k T, _ struct{}) bool {
|
||||
f(k)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
func (set Set[T]) RangeAllParallel(f func(T)) {
|
||||
var wg sync.WaitGroup
|
||||
|
||||
set.Range(func(k T) bool {
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
f(k)
|
||||
wg.Done()
|
||||
}()
|
||||
return true
|
||||
})
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func (set Set[T]) Size() int {
|
||||
return set.m.Size()
|
||||
}
|
||||
Reference in New Issue
Block a user