gitlab.com/beacon-software/gadget@v0.0.0-20181217202115-54565ea1ed5e/collection/stringset.go (about)

     1  package collection
     2  
     3  // StringSet is self explanatory
     4  type StringSet interface {
     5  	// Add the passed objects to the set
     6  	Add(objs ...string) StringSet
     7  	// Remove the passed objects from the set
     8  	Remove(objs ...string) StringSet
     9  	// Contains the passed object
    10  	Contains(string) bool
    11  	// Elements in this set
    12  	Elements() []string
    13  	// Size of this set (number of elements)
    14  	Size() int
    15  	// New set of the same type as this set
    16  	New() StringSet
    17  }
    18  
    19  // can't use stringutil.anonymize here because stringutil uses collections
    20  func anonymize(strs ...string) []interface{} {
    21  	objs := make([]interface{}, len(strs))
    22  	for i, s := range strs {
    23  		objs[i] = s
    24  	}
    25  	return objs
    26  }
    27  
    28  // NewStringSet containing the passed strings.
    29  func NewStringSet(strs ...string) StringSet {
    30  	return &stringSet{set: NewSet(anonymize(strs...)...)}
    31  }
    32  
    33  type stringSet struct {
    34  	set Set
    35  }
    36  
    37  func (strSet *stringSet) Add(objs ...string) StringSet {
    38  	strSet.set = strSet.set.Add(anonymize(objs...)...)
    39  	return strSet
    40  }
    41  
    42  func (strSet *stringSet) Remove(objs ...string) StringSet {
    43  	strSet.set = strSet.set.Remove(anonymize(objs...)...)
    44  	return strSet
    45  }
    46  
    47  func (strSet *stringSet) Contains(s string) bool {
    48  	return strSet.set.Contains(s)
    49  }
    50  
    51  func (strSet *stringSet) Elements() []string {
    52  	elements := strSet.set.Elements()
    53  	sa := make([]string, len(elements))
    54  	for i, obj := range elements {
    55  		s, _ := obj.(string)
    56  		sa[i] = s
    57  	}
    58  	return sa
    59  }
    60  
    61  func (strSet *stringSet) Size() int {
    62  	return strSet.set.Size()
    63  }
    64  
    65  func (strSet *stringSet) New() StringSet {
    66  	return NewStringSet()
    67  }