mirror of https://github.com/k3d-io/k3d
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
976 B
45 lines
976 B
7 months ago
|
// Copyright 2023 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package slices
|
||
|
|
||
|
import "golang.org/x/exp/constraints"
|
||
|
|
||
|
// min is a version of the predeclared function from the Go 1.21 release.
|
||
|
func min[T constraints.Ordered](a, b T) T {
|
||
|
if a < b || isNaN(a) {
|
||
|
return a
|
||
|
}
|
||
|
return b
|
||
|
}
|
||
|
|
||
|
// max is a version of the predeclared function from the Go 1.21 release.
|
||
|
func max[T constraints.Ordered](a, b T) T {
|
||
|
if a > b || isNaN(a) {
|
||
|
return a
|
||
|
}
|
||
|
return b
|
||
|
}
|
||
|
|
||
|
// cmpLess is a copy of cmp.Less from the Go 1.21 release.
|
||
|
func cmpLess[T constraints.Ordered](x, y T) bool {
|
||
|
return (isNaN(x) && !isNaN(y)) || x < y
|
||
|
}
|
||
|
|
||
|
// cmpCompare is a copy of cmp.Compare from the Go 1.21 release.
|
||
|
func cmpCompare[T constraints.Ordered](x, y T) int {
|
||
|
xNaN := isNaN(x)
|
||
|
yNaN := isNaN(y)
|
||
|
if xNaN && yNaN {
|
||
|
return 0
|
||
|
}
|
||
|
if xNaN || x < y {
|
||
|
return -1
|
||
|
}
|
||
|
if yNaN || x > y {
|
||
|
return +1
|
||
|
}
|
||
|
return 0
|
||
|
}
|