[#168] container: Remove pointer tricks from setAttribute

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2022-03-11 12:59:23 +03:00 committed by Alex Vanin
parent 98d4b5c926
commit e89a0d88d2

View file

@ -77,32 +77,34 @@ func (a Attributes) ToV2() []container.Attribute {
// sets value of the attribute by key. // sets value of the attribute by key.
func setAttribute(c *Container, key, value string) { func setAttribute(c *Container, key, value string) {
var a *Attribute attrs := c.Attributes()
found := false
iterateAttributes(c, func(a_ *Attribute) bool { for i := range attrs {
if a_.Key() == key { if attrs[i].Key() == key {
a = a_ attrs[i].SetValue(value)
found = true
break
} }
return a != nil
})
if a == nil {
a = NewAttribute()
a.SetKey(key)
c.SetAttributes(append(c.Attributes(), *a))
} }
a.SetValue(value) if !found {
index := len(attrs)
attrs = append(attrs, Attribute{})
attrs[index].SetKey(key)
attrs[index].SetValue(value)
}
c.SetAttributes(attrs)
} }
// iterates over container attributes. Stops at f's true return. // iterates over container attributes. Stops at f's true return.
// //
// Handler must not be nil. // Handler must not be nil.
func iterateAttributes(c *Container, f func(*Attribute) bool) { func iterateAttributes(c *Container, f func(*Attribute) bool) {
for _, a := range c.Attributes() { attrs := c.Attributes()
if f(&a) { for i := range attrs {
if f(&attrs[i]) {
return return
} }
} }