mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-05-19 14:13:17 -04:00
The goutil that OpenCloud currently uses is one version from the release that adds FreeBSD support, this now compiles successfully on FreeBSD.
144 lines
2.4 KiB
Go
144 lines
2.4 KiB
Go
package mathutil
|
|
|
|
import (
|
|
"math"
|
|
|
|
"github.com/gookit/goutil/comdef"
|
|
)
|
|
|
|
// Min compare two value and return max value
|
|
func Min[T comdef.Number](x, y T) T {
|
|
if x < y {
|
|
return x
|
|
}
|
|
return y
|
|
}
|
|
|
|
// Max compare two value and return max value
|
|
func Max[T comdef.Number](x, y T) T {
|
|
if x > y {
|
|
return x
|
|
}
|
|
return y
|
|
}
|
|
|
|
// SwapMin compare and always return [min, max] value
|
|
func SwapMin[T comdef.Number](x, y T) (T, T) {
|
|
if x < y {
|
|
return x, y
|
|
}
|
|
return y, x
|
|
}
|
|
|
|
// SwapMax compare and always return [max, min] value
|
|
func SwapMax[T comdef.Number](x, y T) (T, T) {
|
|
if x > y {
|
|
return x, y
|
|
}
|
|
return y, x
|
|
}
|
|
|
|
// MaxInt compare and return max value
|
|
func MaxInt(x, y int) int {
|
|
if x > y {
|
|
return x
|
|
}
|
|
return y
|
|
}
|
|
|
|
// SwapMaxInt compare and return max, min value
|
|
func SwapMaxInt(x, y int) (int, int) {
|
|
if x > y {
|
|
return x, y
|
|
}
|
|
return y, x
|
|
}
|
|
|
|
// MaxI64 compare and return max value
|
|
func MaxI64(x, y int64) int64 {
|
|
if x > y {
|
|
return x
|
|
}
|
|
return y
|
|
}
|
|
|
|
// SwapMaxI64 compare and return max, min value
|
|
func SwapMaxI64(x, y int64) (int64, int64) {
|
|
if x > y {
|
|
return x, y
|
|
}
|
|
return y, x
|
|
}
|
|
|
|
// MaxFloat compare and return max value
|
|
func MaxFloat(x, y float64) float64 {
|
|
return math.Max(x, y)
|
|
}
|
|
|
|
// OrElse return default value on val is zero, else return val
|
|
func OrElse[T comdef.Number](val, defVal T) T {
|
|
return ZeroOr(val, defVal)
|
|
}
|
|
|
|
// ZeroOr return default value on val is zero, else return val
|
|
func ZeroOr[T comdef.Number](val, defVal T) T {
|
|
if val != 0 {
|
|
return val
|
|
}
|
|
return defVal
|
|
}
|
|
|
|
// LessOr return val on val < max, else return default value.
|
|
//
|
|
// Example:
|
|
//
|
|
// LessOr(11, 10, 1) // 1
|
|
// LessOr(2, 10, 1) // 2
|
|
// LessOr(10, 10, 1) // 1
|
|
func LessOr[T comdef.Number](val, max, devVal T) T {
|
|
if val < max {
|
|
return val
|
|
}
|
|
return devVal
|
|
}
|
|
|
|
// LteOr return val on val <= max, else return default value.
|
|
//
|
|
// Example:
|
|
//
|
|
// LteOr(11, 10, 1) // 11
|
|
// LteOr(2, 10, 1) // 2
|
|
// LteOr(10, 10, 1) // 10
|
|
func LteOr[T comdef.Number](val, max, devVal T) T {
|
|
if val <= max {
|
|
return val
|
|
}
|
|
return devVal
|
|
}
|
|
|
|
// GreaterOr return val on val > max, else return default value.
|
|
//
|
|
// Example:
|
|
//
|
|
// GreaterOr(23, 0, 2) // 23
|
|
// GreaterOr(0, 0, 2) // 2
|
|
func GreaterOr[T comdef.Number](val, min, defVal T) T {
|
|
if val > min {
|
|
return val
|
|
}
|
|
return defVal
|
|
}
|
|
|
|
// GteOr return val on val >= max, else return default value.
|
|
//
|
|
// Example:
|
|
//
|
|
// GteOr(23, 0, 2) // 23
|
|
// GteOr(0, 0, 2) // 0
|
|
func GteOr[T comdef.Number](val, min, defVal T) T {
|
|
if val >= min {
|
|
return val
|
|
}
|
|
return defVal
|
|
}
|