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  }