aboutsummaryrefslogtreecommitdiff
path: root/src/sort
diff options
context:
space:
mode:
authorEli Bendersky <eliben@golang.org>2023-05-19 10:10:21 -0700
committerEli Bendersky <eliben@google.com>2023-05-23 23:33:29 +0000
commit0df681248862a34ff1233cdc4cf0b036e4761652 (patch)
tree2b0f8384198d97d23c7d1ee7d28fa9f43ed535f3 /src/sort
parent6b7aab7750a8b41b15bac4d598470883c245a0d7 (diff)
downloadgo-0df681248862a34ff1233cdc4cf0b036e4761652.tar.gz
go-0df681248862a34ff1233cdc4cf0b036e4761652.zip
slices: add sorting and comparison functions
Now that the `cmp` package exists, sorting and comparison functions from `x/exp/slices` can be ported to the standard library, using the `cmp.Ordered` type and the `cmp.Less` and `cmp.Compare` functions. This move also includes adjustments to the discussions in #60091 w.r.t. NaN handling and cmp vs. less functions, and adds Min/Max functions. The final API is taken from https://github.com/golang/go/issues/60091#issuecomment-1553850782 Updates #60091 Change-Id: Id7e6c88035b60d4ddd0c48dd82add8e8bc4e22d3 Reviewed-on: https://go-review.googlesource.com/c/go/+/496078 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Eli Bendersky <eliben@google.com> Run-TryBot: Eli Benderskyā€ˇ <eliben@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/sort')
-rw-r--r--src/sort/gen_sort_variants.go14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/sort/gen_sort_variants.go b/src/sort/gen_sort_variants.go
index d738cac917..2c12b98db3 100644
--- a/src/sort/gen_sort_variants.go
+++ b/src/sort/gen_sort_variants.go
@@ -77,15 +77,15 @@ func main() {
Name: "generic_ordered",
Path: "zsortordered.go",
Package: "slices",
- Imports: "import \"constraints\"\n",
+ Imports: "import \"cmp\"\n",
FuncSuffix: "Ordered",
- TypeParam: "[E constraints.Ordered]",
+ TypeParam: "[E cmp.Ordered]",
ExtraParam: "",
ExtraArg: "",
DataType: "[]E",
Funcs: template.FuncMap{
"Less": func(name, i, j string) string {
- return fmt.Sprintf("(%s[%s] < %s[%s])", name, i, name, j)
+ return fmt.Sprintf("cmp.Less(%s[%s], %s[%s])", name, i, name, j)
},
"Swap": func(name, i, j string) string {
return fmt.Sprintf("%s[%s], %s[%s] = %s[%s], %s[%s]", name, i, name, j, name, j, name, i)
@@ -97,14 +97,14 @@ func main() {
Name: "generic_func",
Path: "zsortanyfunc.go",
Package: "slices",
- FuncSuffix: "LessFunc",
+ FuncSuffix: "CmpFunc",
TypeParam: "[E any]",
- ExtraParam: ", less func(a, b E) bool",
- ExtraArg: ", less",
+ ExtraParam: ", cmp func(a, b E) int",
+ ExtraArg: ", cmp",
DataType: "[]E",
Funcs: template.FuncMap{
"Less": func(name, i, j string) string {
- return fmt.Sprintf("less(%s[%s], %s[%s])", name, i, name, j)
+ return fmt.Sprintf("(cmp(%s[%s], %s[%s]) < 0)", name, i, name, j)
},
"Swap": func(name, i, j string) string {
return fmt.Sprintf("%s[%s], %s[%s] = %s[%s], %s[%s]", name, i, name, j, name, j, name, i)