reduce number of loops
This commit is contained in:
parent
8abaddf4b4
commit
f255f362be
16
callbacks.go
16
callbacks.go
@ -186,21 +186,19 @@ func (p *processor) Replace(name string, fn func(*DB)) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *processor) compile() (err error) {
|
func (p *processor) compile() (err error) {
|
||||||
var (
|
var callbacks []*callback
|
||||||
callbacks []*callback
|
removedMap := map[string]bool{}
|
||||||
removed []string
|
|
||||||
)
|
|
||||||
for _, callback := range p.callbacks {
|
for _, callback := range p.callbacks {
|
||||||
if callback.match == nil || callback.match(p.db) {
|
if callback.match == nil || callback.match(p.db) {
|
||||||
callbacks = append(callbacks, callback)
|
callbacks = append(callbacks, callback)
|
||||||
}
|
}
|
||||||
if callback.remove {
|
if callback.remove {
|
||||||
removed = append(removed, callback.name)
|
removedMap[callback.name] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(removed) > 0 {
|
if len(removedMap) > 0 {
|
||||||
callbacks = removeCallbacks(callbacks, removed)
|
callbacks = removeCallbacks(callbacks, removedMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
p.callbacks = callbacks
|
p.callbacks = callbacks
|
||||||
@ -351,10 +349,10 @@ func sortCallbacks(cs []*callback) (fns []func(*DB), err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeCallbacks(cs []*callback, names []string) []*callback {
|
func removeCallbacks(cs []*callback, nameMap map[string]bool) []*callback {
|
||||||
callbacks := make([]*callback, 0, len(cs))
|
callbacks := make([]*callback, 0, len(cs))
|
||||||
for _, callback := range cs {
|
for _, callback := range cs {
|
||||||
if utils.Contains(names, callback.name) {
|
if nameMap[callback.name] {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
callbacks = append(callbacks, callback)
|
callbacks = append(callbacks, callback)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user