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 }