44 lines
771 B
Go
44 lines
771 B
Go
|
package addrs
|
||
|
|
||
|
// Set represents a set of addresses of types that implement UniqueKeyer.
|
||
|
type Set map[UniqueKey]UniqueKeyer
|
||
|
|
||
|
func (s Set) Has(addr UniqueKeyer) bool {
|
||
|
_, exists := s[addr.UniqueKey()]
|
||
|
return exists
|
||
|
}
|
||
|
|
||
|
func (s Set) Add(addr UniqueKeyer) {
|
||
|
s[addr.UniqueKey()] = addr
|
||
|
}
|
||
|
|
||
|
func (s Set) Remove(addr UniqueKeyer) {
|
||
|
delete(s, addr.UniqueKey())
|
||
|
}
|
||
|
|
||
|
func (s Set) Union(other Set) Set {
|
||
|
ret := make(Set)
|
||
|
for k, addr := range s {
|
||
|
ret[k] = addr
|
||
|
}
|
||
|
for k, addr := range other {
|
||
|
ret[k] = addr
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
func (s Set) Intersection(other Set) Set {
|
||
|
ret := make(Set)
|
||
|
for k, addr := range s {
|
||
|
if _, exists := other[k]; exists {
|
||
|
ret[k] = addr
|
||
|
}
|
||
|
}
|
||
|
for k, addr := range other {
|
||
|
if _, exists := s[k]; exists {
|
||
|
ret[k] = addr
|
||
|
}
|
||
|
}
|
||
|
return ret
|
||
|
}
|