mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-20 15:31:24 +02:00
performance improvement and small fix on loadbalancer
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package functional
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/puzpuzpuz/xsync/v3"
|
||||
"gopkg.in/yaml.v3"
|
||||
|
||||
@@ -75,6 +77,20 @@ func (m Map[KT, VT]) RangeAll(do func(k KT, v VT)) {
|
||||
})
|
||||
}
|
||||
|
||||
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 {
|
||||
go func() {
|
||||
do(k, v)
|
||||
wg.Done()
|
||||
}()
|
||||
return true
|
||||
})
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func (m Map[KT, VT]) RemoveAll(criteria func(VT) bool) {
|
||||
m.Range(func(k KT, v VT) bool {
|
||||
if criteria(v) {
|
||||
|
||||
@@ -38,6 +38,10 @@ func (s *Slice[T]) Iterator() []T {
|
||||
return s.s
|
||||
}
|
||||
|
||||
func (s *Slice[T]) Get(i int) T {
|
||||
return s.s[i]
|
||||
}
|
||||
|
||||
func (s *Slice[T]) Set(i int, v T) {
|
||||
s.s[i] = v
|
||||
}
|
||||
@@ -76,6 +80,20 @@ func (s *Slice[T]) SafePop() T {
|
||||
return s.Pop()
|
||||
}
|
||||
|
||||
func (s *Slice[T]) Remove(criteria func(T) bool) {
|
||||
for i, v2 := range s.s {
|
||||
if criteria(v2) {
|
||||
s.s = append(s.s[:i], s.s[i+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Slice[T]) SafeRemove(criteria func(T) bool) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
s.Remove(criteria)
|
||||
}
|
||||
|
||||
func (s *Slice[T]) ForEach(do func(T)) {
|
||||
for _, v := range s.s {
|
||||
do(v)
|
||||
|
||||
Reference in New Issue
Block a user