github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/gnovm/stdlibs/stdshim/addr_set.gno (about) 1 package std 2 3 import "errors" 4 5 //---------------------------------------- 6 // AddressSet 7 8 type AddressSet interface { 9 Size() int 10 AddAddress(Address) error 11 HasAddress(Address) bool 12 } 13 14 //---------------------------------------- 15 // AddressList implements AddressSet. 16 // TODO implement AddressTree with avl. 17 18 type AddressList []Address 19 20 func NewAddressList() *AddressList { 21 return &AddressList{} 22 } 23 24 func (alist *AddressList) Size() int { 25 return len(*alist) 26 } 27 28 func (alist *AddressList) AddAddress(newAddr Address) error { 29 // TODO optimize with binary algorithm 30 for _, addr := range *alist { 31 if addr == newAddr { 32 return errors.New("address already exists") 33 } 34 } 35 *alist = append(*alist, newAddr) 36 return nil 37 } 38 39 func (alist *AddressList) HasAddress(newAddr Address) bool { 40 // TODO optimize with binary algorithm 41 for _, addr := range *alist { 42 if addr == newAddr { 43 return true 44 } 45 } 46 return false 47 }