github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/isc/number.go (about) 1 package isc 2 3 import ( 4 "fmt" 5 "strconv" 6 "unicode" 7 ) 8 9 type ISCInt int 10 type ISCInt8 int8 11 type ISCInt16 int16 12 type ISCInt32 int32 13 type ISCInt64 int64 14 type ISCFloat float32 15 type ISCFloat64 float64 16 type ISCChar rune 17 18 func (i ISCInt) RangeTo(to int) ISCList[int] { 19 var ret ISCList[int] 20 for ii := int(i); ii <= to; ii++ { 21 ret = append(ret, ii) 22 } 23 return ret 24 } 25 26 func (i ISCInt) RangeStepTo(to int, step int) ISCList[int] { 27 var ret ISCList[int] 28 for ii := int(i); ii <= to; ii += step { 29 ret = append(ret, ii) 30 } 31 return ret 32 } 33 34 func (i ISCInt) DownTo(to int) ISCList[int] { 35 var ret ISCList[int] 36 for ii := int(i); ii >= to; ii-- { 37 ret = append(ret, ii) 38 } 39 return ret 40 } 41 42 func (i ISCInt) DownStepTo(to int, step int) ISCList[int] { 43 var ret ISCList[int] 44 for ii := int(i); ii >= to; ii -= step { 45 ret = append(ret, ii) 46 } 47 return ret 48 } 49 50 func (i ISCInt8) RangeTo(to int8) ISCList[int8] { 51 var ret ISCList[int8] 52 for ii := int8(i); ii <= to; ii++ { 53 ret = append(ret, ii) 54 } 55 return ret 56 } 57 58 func (i ISCInt8) RangeStepTo(to int8, step int8) ISCList[int8] { 59 var ret ISCList[int8] 60 for ii := int8(i); ii <= to; ii += step { 61 ret = append(ret, ii) 62 } 63 return ret 64 } 65 66 func (i ISCInt8) DownTo(to int8) ISCList[int8] { 67 var ret ISCList[int8] 68 for ii := int8(i); ii >= to; ii-- { 69 ret = append(ret, ii) 70 } 71 return ret 72 } 73 74 func (i ISCInt8) DownStepTo(to int8, step int8) ISCList[int8] { 75 var ret ISCList[int8] 76 for ii := int8(i); ii >= to; ii -= step { 77 ret = append(ret, ii) 78 } 79 return ret 80 } 81 82 func (i ISCInt16) RangeTo(to int16) ISCList[int16] { 83 var ret ISCList[int16] 84 for ii := int16(i); ii <= to; ii++ { 85 ret = append(ret, ii) 86 } 87 return ret 88 } 89 90 func (i ISCInt16) RangeStepTo(to int16, step int16) ISCList[int16] { 91 var ret ISCList[int16] 92 for ii := int16(i); ii <= to; ii += step { 93 ret = append(ret, ii) 94 } 95 return ret 96 } 97 98 func (i ISCInt16) DownTo(to int16) ISCList[int16] { 99 var ret ISCList[int16] 100 for ii := int16(i); ii >= to; ii-- { 101 ret = append(ret, ii) 102 } 103 return ret 104 } 105 106 func (i ISCInt16) DownStepTo(to int16, step int16) ISCList[int16] { 107 var ret ISCList[int16] 108 for ii := int16(i); ii >= to; ii -= step { 109 ret = append(ret, ii) 110 } 111 return ret 112 } 113 114 func (i ISCInt32) RangeTo(to int32) ISCList[int32] { 115 var ret ISCList[int32] 116 for ii := int32(i); ii <= to; ii++ { 117 ret = append(ret, ii) 118 } 119 return ret 120 } 121 122 func (i ISCInt32) RangeStepTo(to int32, step int32) ISCList[int32] { 123 var ret ISCList[int32] 124 for ii := int32(i); ii <= to; ii += step { 125 ret = append(ret, ii) 126 } 127 return ret 128 } 129 130 func (i ISCInt32) DownTo(to int32) ISCList[int32] { 131 var ret ISCList[int32] 132 for ii := int32(i); ii >= to; ii-- { 133 ret = append(ret, ii) 134 } 135 return ret 136 } 137 138 func (i ISCInt32) DownStepTo(to int32, step int32) ISCList[int32] { 139 var ret ISCList[int32] 140 for ii := int32(i); ii >= to; ii -= step { 141 ret = append(ret, ii) 142 } 143 return ret 144 } 145 146 func (i ISCInt64) RangeTo(to int64) ISCList[int64] { 147 var ret ISCList[int64] 148 for ii := int64(i); ii <= to; ii++ { 149 ret = append(ret, ii) 150 } 151 return ret 152 } 153 154 func (i ISCInt64) RangeStepTo(to int64, step int64) ISCList[int64] { 155 var ret ISCList[int64] 156 for ii := int64(i); ii <= to; ii += step { 157 ret = append(ret, ii) 158 } 159 return ret 160 } 161 162 func (i ISCInt64) DownTo(to int64) ISCList[int64] { 163 var ret ISCList[int64] 164 for ii := int64(i); ii >= to; ii-- { 165 ret = append(ret, ii) 166 } 167 return ret 168 } 169 170 func (i ISCInt64) DownStepTo(to int64, step int64) ISCList[int64] { 171 var ret ISCList[int64] 172 for ii := int64(i); ii >= to; ii -= step { 173 ret = append(ret, ii) 174 } 175 return ret 176 } 177 178 func (i ISCChar) RangeTo(to rune) ISCList[rune] { 179 var ret ISCList[rune] 180 for ii := int64(i); ii <= int64(to); ii++ { 181 ret = append(ret, rune(ii)) 182 } 183 return ret 184 } 185 186 func (i ISCChar) RangeStepTo(to rune, step int64) ISCList[rune] { 187 var ret ISCList[rune] 188 for ii := int64(i); ii <= int64(to); ii += step { 189 ret = append(ret, rune(ii)) 190 } 191 return ret 192 } 193 194 func (i ISCChar) DownTo(to rune) ISCList[rune] { 195 var ret ISCList[rune] 196 for ii := int64(i); ii >= int64(to); ii-- { 197 ret = append(ret, rune(ii)) 198 } 199 return ret 200 } 201 202 func (i ISCChar) DownStepTo(to rune, step int64) ISCList[rune] { 203 var ret ISCList[rune] 204 for ii := int64(i); ii >= int64(to); ii -= step { 205 ret = append(ret, rune(ii)) 206 } 207 return ret 208 } 209 210 func (i ISCInt) ToString() ISCString { 211 return ISCString(fmt.Sprintf("%d", i)) 212 } 213 214 func (i ISCInt8) ToString() ISCString { 215 return ISCString(fmt.Sprintf("%d", i)) 216 } 217 218 func (i ISCInt16) ToString() ISCString { 219 return ISCString(fmt.Sprintf("%d", i)) 220 } 221 222 func (i ISCInt32) ToString() ISCString { 223 return ISCString(fmt.Sprintf("%d", i)) 224 } 225 226 func (i ISCInt64) ToString() ISCString { 227 return ISCString(fmt.Sprintf("%d", i)) 228 } 229 230 func (i ISCChar) ToString() ISCString { 231 return ISCString(string(i)) 232 } 233 234 func (i ISCChar) Code() int { 235 return int(i) 236 } 237 238 func (i ISCFloat) ToString() ISCString { 239 return ISCString(fmt.Sprintf("%f", i)) 240 } 241 242 func (i ISCFloat64) ToString() ISCString { 243 return ISCString(fmt.Sprintf("%f", i)) 244 } 245 246 func (i ISCInt) RotateLeft(bitCount int) ISCInt { 247 s := strconv.IntSize 248 return ISCInt(int(i)<<bitCount | int(i)>>(s-bitCount)) 249 } 250 251 func (i ISCInt) RotateRight(bitCount int) ISCInt { 252 s := strconv.IntSize 253 return ISCInt(int(i)>>bitCount | int(i)<<(s-bitCount)) 254 } 255 256 func (i ISCInt8) RotateLeft(bitCount int8) ISCInt8 { 257 return ISCInt8(int8(i)<<bitCount | int8(i)>>(8-bitCount)) 258 } 259 260 func (i ISCInt8) RotateRight(bitCount int8) ISCInt8 { 261 return ISCInt8(int8(i)>>bitCount | int8(i)<<(8-bitCount)) 262 } 263 264 func (i ISCInt16) RotateLeft(bitCount int16) ISCInt16 { 265 return ISCInt16(int16(i)<<bitCount | int16(i)>>(16-bitCount)) 266 } 267 268 func (i ISCInt16) RotateRight(bitCount int16) ISCInt16 { 269 return ISCInt16(int16(i)>>bitCount | int16(i)<<(16-bitCount)) 270 } 271 272 func (i ISCInt32) RotateLeft(bitCount int32) ISCInt32 { 273 return ISCInt32(int32(i)<<bitCount | int32(i)>>(32-bitCount)) 274 } 275 276 func (i ISCInt32) RotateRight(bitCount int32) ISCInt32 { 277 return ISCInt32(int32(i)>>bitCount | int32(i)<<(32-bitCount)) 278 } 279 280 func (i ISCInt64) RotateLeft(bitCount int64) ISCInt64 { 281 return ISCInt64(int64(i)<<bitCount | int64(i)>>(64-bitCount)) 282 } 283 284 func (i ISCInt64) RotateRight(bitCount int64) ISCInt64 { 285 return ISCInt64(int64(i)>>bitCount | int64(i)<<(64-bitCount)) 286 } 287 288 func (i ISCInt) ToHex() string { 289 return fmt.Sprintf("%X", i) 290 } 291 292 func (i ISCInt8) ToHex() string { 293 return fmt.Sprintf("%X", i) 294 } 295 296 func (i ISCInt16) ToHex() string { 297 return fmt.Sprintf("%X", i) 298 } 299 300 func (i ISCInt32) ToHex() string { 301 return fmt.Sprintf("%X", i) 302 } 303 304 func (i ISCInt64) ToHex() string { 305 return fmt.Sprintf("%X", i) 306 } 307 308 func (i ISCInt) ToOct() string { 309 return strconv.FormatInt(int64(i), 8) 310 } 311 312 func (i ISCInt8) ToOct() string { 313 return strconv.FormatInt(int64(i), 8) 314 } 315 316 func (i ISCInt16) ToOct() string { 317 return strconv.FormatInt(int64(i), 8) 318 } 319 320 func (i ISCInt32) ToOct() string { 321 return strconv.FormatInt(int64(i), 8) 322 } 323 324 func (i ISCInt64) ToOct() string { 325 return strconv.FormatInt(int64(i), 8) 326 } 327 328 func (i ISCInt) ToBinary() string { 329 return strconv.FormatInt(int64(i), 2) 330 } 331 332 func (i ISCInt8) ToBinary() string { 333 return strconv.FormatInt(int64(i), 2) 334 } 335 336 func (i ISCInt16) ToBinary() string { 337 return strconv.FormatInt(int64(i), 2) 338 } 339 340 func (i ISCInt32) ToBinary() string { 341 return strconv.FormatInt(int64(i), 2) 342 } 343 344 func (i ISCInt64) ToBinary() string { 345 return strconv.FormatInt(int64(i), 2) 346 } 347 348 func (i ISCChar) IsLetter() bool { 349 return unicode.IsLetter(rune(i)) 350 } 351 352 func (i ISCChar) IsDigit() bool { 353 return unicode.IsDigit(rune(i)) 354 } 355 356 func (i ISCChar) IsLetterOrDigit() bool { 357 return unicode.IsLetter(rune(i)) || unicode.IsDigit(rune(i)) 358 } 359 360 func (i ISCChar) IsSymbol() bool { 361 return unicode.IsSymbol(rune(i)) 362 } 363 364 func (i ISCChar) IsWhitespace() bool { 365 return unicode.IsSpace(rune(i)) 366 } 367 368 func (i ISCChar) ToUpper() ISCChar { 369 return ISCChar(unicode.ToUpper(rune(i))) 370 } 371 372 func (i ISCChar) ToLower() ISCChar { 373 return ISCChar(unicode.ToLower(rune(i))) 374 } 375 376 func (i ISCChar) ToTitle() ISCChar { 377 return ISCChar(unicode.ToTitle(rune(i))) 378 } 379 380 func (i ISCChar) IsUpper() bool { 381 return unicode.IsUpper(rune(i)) 382 } 383 384 func (i ISCChar) IsLower() bool { 385 return unicode.IsLower(rune(i)) 386 } 387 388 func (i ISCChar) IsTitle() bool { 389 return unicode.IsTitle(rune(i)) 390 } 391 392 func (i ISCChar) IsISOControl() bool { 393 return unicode.IsControl(rune(i)) 394 } 395 396 const ( 397 MIN_LOW_SURROGATE = 0xDC00 398 MAX_LOW_SURROGATE = 0xDFFF 399 MIN_HIGH_SURROGATE = 0xD800 400 MAX_HIGH_SURROGATE = 0xDBFF 401 ) 402 403 func (i ISCChar) IsHighSurrogate() bool { 404 return i >= MIN_HIGH_SURROGATE && i < (MAX_HIGH_SURROGATE+1) 405 } 406 407 func (i ISCChar) IsLowSurrogate() bool { 408 return i >= MIN_LOW_SURROGATE && i < (MAX_LOW_SURROGATE+1) 409 }