mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
84 lines
1.0 KiB
Go
84 lines
1.0 KiB
Go
package obiutils
|
|
|
|
import "golang.org/x/exp/constraints"
|
|
|
|
func MinInt(x, y int) int {
|
|
if x < y {
|
|
return x
|
|
}
|
|
return y
|
|
}
|
|
|
|
func MaxInt(x, y int) int {
|
|
if x < y {
|
|
return y
|
|
}
|
|
return x
|
|
}
|
|
|
|
func MinMaxInt(x, y int) (int, int) {
|
|
if x < y {
|
|
return x, y
|
|
}
|
|
return y, x
|
|
}
|
|
|
|
func MinUInt16(x, y uint16) uint16 {
|
|
if x < y {
|
|
return x
|
|
}
|
|
return y
|
|
}
|
|
|
|
func MaxUInt16(x, y uint16) uint16 {
|
|
if x < y {
|
|
return y
|
|
}
|
|
return x
|
|
}
|
|
|
|
func MinSlice[T constraints.Ordered](vec []T) T {
|
|
if len(vec) == 0 {
|
|
panic("empty slice")
|
|
}
|
|
min := vec[0]
|
|
for _, v := range vec {
|
|
if v < min {
|
|
min = v
|
|
}
|
|
}
|
|
return min
|
|
}
|
|
|
|
func MaxSlice[T constraints.Ordered](vec []T) T {
|
|
if len(vec) == 0 {
|
|
panic("empty slice")
|
|
}
|
|
max := vec[0]
|
|
for _, v := range vec {
|
|
if v > max {
|
|
max = v
|
|
}
|
|
}
|
|
return max
|
|
}
|
|
|
|
func RangeSlice[T constraints.Ordered](vec []T) (min, max T) {
|
|
if len(vec) == 0 {
|
|
panic("empty slice")
|
|
}
|
|
|
|
min = vec[0]
|
|
max = vec[0]
|
|
for _, v := range vec {
|
|
if v > max {
|
|
max = v
|
|
}
|
|
if v < min {
|
|
min = v
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|