mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-10-03 23:46:27 +08:00
44 lines
963 B
Go
44 lines
963 B
Go
package core
|
|
|
|
// This code copied from go1.21 for backward support in go1.20.
|
|
// We need to support go1.20 for Windows 7
|
|
|
|
// Index returns the index of the first occurrence of v in s,
|
|
// or -1 if not present.
|
|
func Index[S ~[]E, E comparable](s S, v E) int {
|
|
for i := range s {
|
|
if v == s[i] {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
|
|
// Contains reports whether v is present in s.
|
|
func Contains[S ~[]E, E comparable](s S, v E) bool {
|
|
return Index(s, v) >= 0
|
|
}
|
|
|
|
type Ordered interface {
|
|
~int | ~int8 | ~int16 | ~int32 | ~int64 |
|
|
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
|
|
~float32 | ~float64 |
|
|
~string
|
|
}
|
|
|
|
// Max returns the maximal value in x. It panics if x is empty.
|
|
// For floating-point E, Max propagates NaNs (any NaN value in x
|
|
// forces the output to be NaN).
|
|
func Max[S ~[]E, E Ordered](x S) E {
|
|
if len(x) < 1 {
|
|
panic("slices.Max: empty list")
|
|
}
|
|
m := x[0]
|
|
for i := 1; i < len(x); i++ {
|
|
if x[i] > m {
|
|
m = x[i]
|
|
}
|
|
}
|
|
return m
|
|
}
|