github.com/cycloidio/terraform@v1.1.10-0.20220513142504-76d5c768dc63/addrs/set.go (about)

     1  package addrs
     2  
     3  // Set represents a set of addresses of types that implement UniqueKeyer.
     4  type Set map[UniqueKey]UniqueKeyer
     5  
     6  func (s Set) Has(addr UniqueKeyer) bool {
     7  	_, exists := s[addr.UniqueKey()]
     8  	return exists
     9  }
    10  
    11  func (s Set) Add(addr UniqueKeyer) {
    12  	s[addr.UniqueKey()] = addr
    13  }
    14  
    15  func (s Set) Remove(addr UniqueKeyer) {
    16  	delete(s, addr.UniqueKey())
    17  }
    18  
    19  func (s Set) Union(other Set) Set {
    20  	ret := make(Set)
    21  	for k, addr := range s {
    22  		ret[k] = addr
    23  	}
    24  	for k, addr := range other {
    25  		ret[k] = addr
    26  	}
    27  	return ret
    28  }
    29  
    30  func (s Set) Intersection(other Set) Set {
    31  	ret := make(Set)
    32  	for k, addr := range s {
    33  		if _, exists := other[k]; exists {
    34  			ret[k] = addr
    35  		}
    36  	}
    37  	for k, addr := range other {
    38  		if _, exists := s[k]; exists {
    39  			ret[k] = addr
    40  		}
    41  	}
    42  	return ret
    43  }