github.com/aclisp/heapster@v0.19.2-0.20160613100040-51756f899a96/Godeps/_workspace/src/k8s.io/kubernetes/pkg/util/sets/string.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors All rights reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 // This file was autogenerated by set-gen. Do not edit it manually! 18 19 package sets 20 21 import ( 22 "reflect" 23 "sort" 24 ) 25 26 // sets.String is a set of strings, implemented via map[string]struct{} for minimal memory consumption. 27 type String map[string]Empty 28 29 // New creates a String from a list of values. 30 func NewString(items ...string) String { 31 ss := String{} 32 ss.Insert(items...) 33 return ss 34 } 35 36 // StringKeySet creates a String from a keys of a map[string](? extends interface{}). 37 // If the value passed in is not actually a map, this will panic. 38 func StringKeySet(theMap interface{}) String { 39 v := reflect.ValueOf(theMap) 40 ret := String{} 41 42 for _, keyValue := range v.MapKeys() { 43 ret.Insert(keyValue.Interface().(string)) 44 } 45 return ret 46 } 47 48 // Insert adds items to the set. 49 func (s String) Insert(items ...string) { 50 for _, item := range items { 51 s[item] = Empty{} 52 } 53 } 54 55 // Delete removes all items from the set. 56 func (s String) Delete(items ...string) { 57 for _, item := range items { 58 delete(s, item) 59 } 60 } 61 62 // Has returns true if and only if item is contained in the set. 63 func (s String) Has(item string) bool { 64 _, contained := s[item] 65 return contained 66 } 67 68 // HasAll returns true if and only if all items are contained in the set. 69 func (s String) HasAll(items ...string) bool { 70 for _, item := range items { 71 if !s.Has(item) { 72 return false 73 } 74 } 75 return true 76 } 77 78 // HasAny returns true if any items are contained in the set. 79 func (s String) HasAny(items ...string) bool { 80 for _, item := range items { 81 if s.Has(item) { 82 return true 83 } 84 } 85 return false 86 } 87 88 // Difference returns a set of objects that are not in s2 89 // For example: 90 // s1 = {a1, a2, a3} 91 // s2 = {a1, a2, a4, a5} 92 // s1.Difference(s2) = {a3} 93 // s2.Difference(s1) = {a4, a5} 94 func (s String) Difference(s2 String) String { 95 result := NewString() 96 for key := range s { 97 if !s2.Has(key) { 98 result.Insert(key) 99 } 100 } 101 return result 102 } 103 104 // Union returns a new set which includes items in either s1 or s2. 105 // For example: 106 // s1 = {a1, a2} 107 // s2 = {a3, a4} 108 // s1.Union(s2) = {a1, a2, a3, a4} 109 // s2.Union(s1) = {a1, a2, a3, a4} 110 func (s1 String) Union(s2 String) String { 111 result := NewString() 112 for key := range s1 { 113 result.Insert(key) 114 } 115 for key := range s2 { 116 result.Insert(key) 117 } 118 return result 119 } 120 121 // Intersection returns a new set which includes the item in BOTH s1 and s2 122 // For example: 123 // s1 = {a1, a2} 124 // s2 = {a2, a3} 125 // s1.Intersection(s2) = {a2} 126 func (s1 String) Intersection(s2 String) String { 127 var walk, other String 128 result := NewString() 129 if s1.Len() < s2.Len() { 130 walk = s1 131 other = s2 132 } else { 133 walk = s2 134 other = s1 135 } 136 for key := range walk { 137 if other.Has(key) { 138 result.Insert(key) 139 } 140 } 141 return result 142 } 143 144 // IsSuperset returns true if and only if s1 is a superset of s2. 145 func (s1 String) IsSuperset(s2 String) bool { 146 for item := range s2 { 147 if !s1.Has(item) { 148 return false 149 } 150 } 151 return true 152 } 153 154 // Equal returns true if and only if s1 is equal (as a set) to s2. 155 // Two sets are equal if their membership is identical. 156 // (In practice, this means same elements, order doesn't matter) 157 func (s1 String) Equal(s2 String) bool { 158 return len(s1) == len(s2) && s1.IsSuperset(s2) 159 } 160 161 type sortableSliceOfString []string 162 163 func (s sortableSliceOfString) Len() int { return len(s) } 164 func (s sortableSliceOfString) Less(i, j int) bool { return lessString(s[i], s[j]) } 165 func (s sortableSliceOfString) Swap(i, j int) { s[i], s[j] = s[j], s[i] } 166 167 // List returns the contents as a sorted string slice. 168 func (s String) List() []string { 169 res := make(sortableSliceOfString, 0, len(s)) 170 for key := range s { 171 res = append(res, key) 172 } 173 sort.Sort(res) 174 return []string(res) 175 } 176 177 // Returns a single element from the set. 178 func (s String) PopAny() (string, bool) { 179 for key := range s { 180 s.Delete(key) 181 return key, true 182 } 183 var zeroValue string 184 return zeroValue, false 185 } 186 187 // Len returns the size of the set. 188 func (s String) Len() int { 189 return len(s) 190 } 191 192 func lessString(lhs, rhs string) bool { 193 return lhs < rhs 194 }