1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
package main
import (
"sort"
"strings"
)
// Local implementation of stdlib funcs that are not available in go 1.8
// slices.Contains().
func stringSliceContains(slice []string, str string) bool {
for _, s := range slice {
if s == str {
return true
}
}
return false
}
// strings.Cutprefix().
func cutPrefix(s, prefix string) (after string, found bool) {
if !strings.HasPrefix(s, prefix) {
return s, false
}
return s[len(prefix):], true
}
type stringSet struct {
m map[string]bool
}
func newStringSet() *stringSet {
return &stringSet{m: make(map[string]bool)}
}
func (ss *stringSet) add(s string) {
if !ss.m[s] {
ss.m[s] = true
}
}
// String returns the set keys joined up with colons in alphabetical order.
func (ss stringSet) String() string {
var keys []string
for k := range ss.m {
keys = append(keys, k)
}
sort.StringSlice(keys).Sort()
return strings.Join(keys, ":")
}
|