reduce number of loops

This commit is contained in:
snackmgmg 2024-03-20 14:13:13 +09:00
parent 8abaddf4b4
commit f255f362be

View File

@ -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)