1.新增yml文件支持

2.优化网络模块日志
3.新增类型转换函数
This commit is contained in:
duanhf2012
2024-10-09 17:38:44 +08:00
parent f600c2a573
commit c72f2e4582
14 changed files with 391 additions and 138 deletions

View File

@@ -2,10 +2,10 @@ package smath
import (
"github.com/duanhf2012/origin/v2/log"
"github.com/duanhf2012/origin/v2/util/typedef"
"github.com/duanhf2012/origin/v2/util/typ"
)
func Max[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
func Max[NumType typ.Number](number1 NumType, number2 NumType) NumType {
if number1 > number2 {
return number1
}
@@ -13,7 +13,7 @@ func Max[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
return number2
}
func Min[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
func Min[NumType typ.Number](number1 NumType, number2 NumType) NumType {
if number1 < number2 {
return number1
}
@@ -21,7 +21,7 @@ func Min[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
return number2
}
func Abs[NumType typedef.Signed|typedef.Float](Num NumType) NumType {
func Abs[NumType typ.Signed | typ.Float](Num NumType) NumType {
if Num < 0 {
return -1 * Num
}
@@ -29,7 +29,7 @@ func Abs[NumType typedef.Signed|typedef.Float](Num NumType) NumType {
return Num
}
func AddSafe[NumType typedef.Number](number1 NumType, number2 NumType) (NumType, bool) {
func AddSafe[NumType typ.Number](number1 NumType, number2 NumType) (NumType, bool) {
ret := number1 + number2
if number2 > 0 && ret < number1 {
log.Stack("Calculation overflow", log.Any("number1", number1), log.Any("number2", number2))
@@ -42,7 +42,7 @@ func AddSafe[NumType typedef.Number](number1 NumType, number2 NumType) (NumType,
return ret, true
}
func SubSafe[NumType typedef.Number](number1 NumType, number2 NumType) (NumType, bool) {
func SubSafe[NumType typ.Number](number1 NumType, number2 NumType) (NumType, bool) {
ret := number1 - number2
if number2 > 0 && ret > number1 {
log.Stack("Calculation overflow", log.Any("number1", number1), log.Any("number2", number2))
@@ -55,7 +55,7 @@ func SubSafe[NumType typedef.Number](number1 NumType, number2 NumType) (NumType,
return ret, true
}
func MulSafe[NumType typedef.Number](number1 NumType, number2 NumType) (NumType, bool) {
func MulSafe[NumType typ.Number](number1 NumType, number2 NumType) (NumType, bool) {
ret := number1 * number2
if number1 == 0 || number2 == 0 {
return ret, true
@@ -69,18 +69,17 @@ func MulSafe[NumType typedef.Number](number1 NumType, number2 NumType) (NumType,
return ret, true
}
func Add[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
func Add[NumType typ.Number](number1 NumType, number2 NumType) NumType {
ret, _ := AddSafe(number1, number2)
return ret
}
func Sub[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
func Sub[NumType typ.Number](number1 NumType, number2 NumType) NumType {
ret, _ := SubSafe(number1, number2)
return ret
}
func Mul[NumType typedef.Number](number1 NumType, number2 NumType) NumType {
func Mul[NumType typ.Number](number1 NumType, number2 NumType) NumType {
ret, _ := MulSafe(number1, number2)
return ret
}

View File

@@ -1,12 +1,12 @@
package srand
import (
"github.com/duanhf2012/origin/v2/util/typedef"
"github.com/duanhf2012/origin/v2/util/typ"
"math/rand"
"slices"
)
func Sum[E ~[]T, T typedef.Number](arr E) T {
func Sum[E ~[]T, T typ.Number](arr E) T {
var sum T
for i := range arr {
sum += arr[i]
@@ -14,7 +14,7 @@ func Sum[E ~[]T, T typedef.Number](arr E) T {
return sum
}
func SumFunc[E ~[]V, V any, T typedef.Number](arr E, getValue func(i int) T) T {
func SumFunc[E ~[]V, V any, T typ.Number](arr E, getValue func(i int) T) T {
var sum T
for i := range arr {
sum += getValue(i)
@@ -45,11 +45,11 @@ func RandN[E ~[]T, T any](arr E, num int) []T {
for i := range index {
ret = append(ret, arr[index[i]])
}
return ret
}
func RandWeight[E ~[]T, T typedef.Integer](weights E) int {
func RandWeight[E ~[]T, T typ.Integer](weights E) int {
totalWeight := Sum(weights)
if totalWeight <= 0 {
return -1
@@ -65,7 +65,7 @@ func RandWeight[E ~[]T, T typedef.Integer](weights E) int {
return -1
}
func RandWeightFunc[E ~[]U, U any, T typedef.Integer](arr E, getWeight func(i int) T) int {
func RandWeightFunc[E ~[]U, U any, T typ.Integer](arr E, getWeight func(i int) T) int {
weights := make([]T, 0, len(arr))
for i := range arr {
weights = append(weights, getWeight(i))
@@ -73,7 +73,7 @@ func RandWeightFunc[E ~[]U, U any, T typedef.Integer](arr E, getWeight func(i in
return RandWeight(weights)
}
func Get[E ~[]T, T any, U typedef.Integer](arr E, index U) (ret T, ok bool) {
func Get[E ~[]T, T any, U typ.Integer](arr E, index U) (ret T, ok bool) {
if index < 0 || int(index) >= len(arr) {
return
}
@@ -82,7 +82,7 @@ func Get[E ~[]T, T any, U typedef.Integer](arr E, index U) (ret T, ok bool) {
return
}
func GetPointer[E ~[]T, T any, U typedef.Integer](arr E, index U) *T {
func GetPointer[E ~[]T, T any, U typ.Integer](arr E, index U) *T {
if index < 0 || int(index) >= len(arr) {
return nil
}

54
util/typ/type.go Normal file
View File

@@ -0,0 +1,54 @@
package typ
import "errors"
type Signed interface {
~int | ~int8 | ~int16 | ~int32 | ~int64
}
type Unsigned interface {
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64
}
type Float interface {
~float32 | ~float64
}
type Integer interface {
Signed | Unsigned
}
type Number interface {
Signed | Unsigned | Float
}
type Ordered interface {
Number | Float | ~string
}
func ConvertToNumber[DType Number](val interface{}) (DType, error) {
switch val.(type) {
case int64:
return DType(val.(int64)), nil
case int:
return DType(val.(int)), nil
case uint:
return DType(val.(uint)), nil
case uint64:
return DType(val.(uint64)), nil
case float32:
return DType(val.(float32)), nil
case float64:
return DType(val.(float64)), nil
case int32:
return DType(val.(int32)), nil
case uint32:
return DType(val.(uint32)), nil
case int16:
return DType(val.(int16)), nil
case uint16:
return DType(val.(uint16)), nil
}
return 0, errors.New("unsupported type")
}

View File

@@ -1,25 +0,0 @@
package typedef
type Signed interface {
~int | ~int8 | ~int16 | ~int32 | ~int64
}
type Unsigned interface {
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64
}
type Float interface {
~float32 | ~float64
}
type Integer interface {
Signed|Unsigned
}
type Number interface {
Signed|Unsigned|Float
}
type Ordered interface {
Number|Float|~string
}