github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/domain/entities/set.go (about)

     1  package entities
     2  
     3  import (
     4  	"strings"
     5  )
     6  
     7  type StringSet struct {
     8  	m map[string]struct{}
     9  }
    10  
    11  func NewStringSet(elem ...string) *StringSet {
    12  	s := &StringSet{}
    13  	s.m = make(map[string]struct{}, len(elem))
    14  	for _, e := range elem {
    15  		s.Add(e)
    16  	}
    17  	return s
    18  }
    19  
    20  func (s *StringSet) Add(elem string) {
    21  	s.m[elem] = struct{}{}
    22  }
    23  
    24  func (s *StringSet) Remove(elem string) {
    25  	delete(s.m, elem)
    26  }
    27  
    28  func (s *StringSet) Contains(elem string) bool {
    29  	_, ok := s.m[elem]
    30  	return ok
    31  }
    32  
    33  func (s *StringSet) Elements() []string {
    34  	keys := make([]string, len(s.m))
    35  	i := 0
    36  	for k := range s.m {
    37  		keys[i] = k
    38  		i++
    39  	}
    40  	return keys
    41  }
    42  
    43  func (s *StringSet) String() string {
    44  	return strings.Join(s.Elements(), ", ")
    45  }