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 }