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) {
|
||||
var (
|
||||
callbacks []*callback
|
||||
removed []string
|
||||
)
|
||||
var callbacks []*callback
|
||||
removedMap := map[string]bool{}
|
||||
for _, callback := range p.callbacks {
|
||||
if callback.match == nil || callback.match(p.db) {
|
||||
callbacks = append(callbacks, callback)
|
||||
}
|
||||
if callback.remove {
|
||||
removed = append(removed, callback.name)
|
||||
removedMap[callback.name] = true
|
||||
}
|
||||
}
|
||||
|
||||
if len(removed) > 0 {
|
||||
callbacks = removeCallbacks(callbacks, removed)
|
||||
if len(removedMap) > 0 {
|
||||
callbacks = removeCallbacks(callbacks, removedMap)
|
||||
}
|
||||
|
||||
p.callbacks = callbacks
|
||||
@ -351,10 +349,10 @@ func sortCallbacks(cs []*callback) (fns []func(*DB), err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func removeCallbacks(cs []*callback, names []string) []*callback {
|
||||
func removeCallbacks(cs []*callback, nameMap map[string]bool) []*callback {
|
||||
callbacks := make([]*callback, 0, len(cs))
|
||||
for _, callback := range cs {
|
||||
if utils.Contains(names, callback.name) {
|
||||
if nameMap[callback.name] {
|
||||
continue
|
||||
}
|
||||
callbacks = append(callbacks, callback)
|
||||
|
Loading…
x
Reference in New Issue
Block a user