github.com/wzzhu/tensor@v0.9.24/genlib2/genlib.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "reflect" 6 "strings" 7 ) 8 9 type TypeClass func(a reflect.Kind) bool 10 11 func isParameterized(a reflect.Kind) bool { 12 for _, v := range parameterizedKinds { 13 if v == a { 14 return true 15 } 16 } 17 return false 18 } 19 20 func isNotParameterized(a reflect.Kind) bool { return !isParameterized(a) } 21 22 func isRangeable(a reflect.Kind) bool { 23 for _, v := range rangeable { 24 if v == a { 25 return true 26 } 27 } 28 return false 29 } 30 31 func isSpecialized(a reflect.Kind) bool { 32 for _, v := range specialized { 33 if v == a { 34 return true 35 } 36 } 37 return false 38 } 39 40 func isNumber(a reflect.Kind) bool { 41 for _, v := range number { 42 if v == a { 43 return true 44 } 45 } 46 return false 47 } 48 49 func isSignedNumber(a reflect.Kind) bool { 50 for _, v := range signedNumber { 51 if v == a { 52 return true 53 } 54 } 55 return false 56 } 57 58 func isNonComplexNumber(a reflect.Kind) bool { 59 for _, v := range nonComplexNumber { 60 if v == a { 61 return true 62 } 63 } 64 return false 65 } 66 67 func isAddable(a reflect.Kind) bool { 68 if a == reflect.String { 69 return true 70 } 71 return isNumber(a) 72 } 73 74 func isComplex(a reflect.Kind) bool { 75 if a == reflect.Complex128 || a == reflect.Complex64 { 76 return true 77 } 78 return false 79 } 80 81 func panicsDiv0(a reflect.Kind) bool { 82 for _, v := range div0panics { 83 if v == a { 84 return true 85 } 86 } 87 return false 88 } 89 90 func isEq(a reflect.Kind) bool { 91 for _, v := range elEq { 92 if v == a { 93 return true 94 } 95 } 96 return false 97 } 98 99 func isOrd(a reflect.Kind) bool { 100 for _, v := range elOrd { 101 if v == a { 102 return true 103 } 104 } 105 return false 106 } 107 108 func isBoolRepr(a reflect.Kind) bool { 109 for _, v := range boolRepr { 110 if v == a { 111 return true 112 } 113 } 114 return false 115 } 116 117 func mathPkg(a reflect.Kind) string { 118 if a == reflect.Float64 { 119 return "math." 120 } 121 if a == reflect.Float32 { 122 return "math32." 123 } 124 if a == reflect.Complex64 || a == reflect.Complex128 { 125 return "cmplx." 126 } 127 return "" 128 } 129 130 func vecPkg(a reflect.Kind) string { 131 if a == reflect.Float64 { 132 return "vecf64." 133 } 134 if a == reflect.Float32 { 135 return "vecf32." 136 } 137 return "" 138 } 139 140 func getalias(name string) string { 141 if nice, ok := nameMaps[name]; ok { 142 return nice 143 } 144 return name 145 } 146 147 func interfaceName(name string) string { 148 switch name { 149 case "Square": 150 return "Squarer" 151 case "Cube": 152 return "Cuber" 153 case "Eq", "ElEq": 154 return "ElEqer" 155 case "Ne", "ElNe": 156 return "ElEqer" 157 default: 158 return name + "er" 159 } 160 } 161 162 func bitSizeOf(a reflect.Kind) string { 163 switch a { 164 case reflect.Int, reflect.Uint: 165 return "0" 166 case reflect.Int8, reflect.Uint8: 167 return "8" 168 case reflect.Int16, reflect.Uint16: 169 return "16" 170 case reflect.Int32, reflect.Uint32, reflect.Float32: 171 return "32" 172 case reflect.Int64, reflect.Uint64, reflect.Float64: 173 return "64" 174 } 175 return "UNKNOWN BIT SIZE" 176 } 177 178 func trueValue(a reflect.Kind) string { 179 switch a { 180 case reflect.String: 181 return `"true"` 182 case reflect.Bool: 183 return "true" 184 default: 185 return "1" 186 } 187 } 188 189 func falseValue(a reflect.Kind) string { 190 switch a { 191 case reflect.String: 192 return `"false"` 193 case reflect.Bool: 194 return "false" 195 default: 196 return "0" 197 } 198 } 199 200 func isFloat(a reflect.Kind) bool { 201 if a == reflect.Float32 || a == reflect.Float64 { 202 return true 203 } 204 return false 205 } 206 207 func isFloatCmplx(a reflect.Kind) bool { 208 if a == reflect.Float32 || a == reflect.Float64 || a == reflect.Complex64 || a == reflect.Complex128 { 209 return true 210 } 211 return false 212 } 213 214 func isntFloat(a reflect.Kind) bool { return !isFloat(a) } 215 216 func isntComplex(a reflect.Kind) bool { return !isComplex(a) } 217 218 func short(a reflect.Kind) string { 219 return shortNames[a] 220 } 221 222 func clean(a string) string { 223 if a == "unsafe.pointer" { 224 return "unsafe.Pointer" 225 } 226 return a 227 } 228 229 func unexport(a string) string { 230 return strings.ToLower(string(a[0])) + a[1:] 231 } 232 233 func strip(a string) string { 234 return strings.Replace(a, ".", "", -1) 235 } 236 237 func reflectKind(a reflect.Kind) string { 238 return strip(strings.Title(a.String())) 239 } 240 241 func asType(a reflect.Kind) string { 242 return clean(a.String()) 243 } 244 245 func sliceOf(a reflect.Kind) string { 246 s := fmt.Sprintf("%ss()", strings.Title(a.String())) 247 return strip(clean(s)) 248 } 249 250 func getOne(a reflect.Kind) string { 251 return fmt.Sprintf("Get%s", short(a)) 252 } 253 254 func setOne(a reflect.Kind) string { 255 return fmt.Sprintf("Set%s", short(a)) 256 } 257 258 func filter(a []reflect.Kind, is func(reflect.Kind) bool) (retVal []reflect.Kind) { 259 for _, k := range a { 260 if is(k) { 261 retVal = append(retVal, k) 262 } 263 } 264 return 265 }