]> Cypherpunks repositories - gostls13.git/commitdiff
slices: reduce code nesting depth for Compact and CompactFunc
authorJes Cok <xigua67damn@gmail.com>
Fri, 26 Apr 2024 13:49:41 +0000 (21:49 +0800)
committerGopher Robot <gobot@golang.org>
Mon, 29 Apr 2024 14:01:59 +0000 (14:01 +0000)
To make it easier to read.

Change-Id: I2fa1eb78d879b9d86b4dc839be7ede37c7c864f4
Reviewed-on: https://go-review.googlesource.com/c/go/+/581976
Auto-Submit: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Joedian Reid <joedian@google.com>
src/slices/slices.go

index ae4c2adbf48050f32012c204b7f8f2cf58c93a14..857ab46314324b4a228bf483a1a7f03821f298a0 100644 (file)
@@ -355,20 +355,21 @@ func Clone[S ~[]E, E any](s S) S {
 // which may have a smaller length.
 // Compact zeroes the elements between the new length and the original length.
 func Compact[S ~[]E, E comparable](s S) S {
-       if len(s) > 1 {
-               for k := 1; k < len(s); k++ {
-                       if s[k] == s[k-1] {
-                               s2 := s[k:]
-                               for k2 := 1; k2 < len(s2); k2++ {
-                                       if s2[k2] != s2[k2-1] {
-                                               s[k] = s2[k2]
-                                               k++
-                                       }
+       if len(s) < 2 {
+               return s
+       }
+       for k := 1; k < len(s); k++ {
+               if s[k] == s[k-1] {
+                       s2 := s[k:]
+                       for k2 := 1; k2 < len(s2); k2++ {
+                               if s2[k2] != s2[k2-1] {
+                                       s[k] = s2[k2]
+                                       k++
                                }
-
-                               clear(s[k:]) // zero/nil out the obsolete elements, for GC
-                               return s[:k]
                        }
+
+                       clear(s[k:]) // zero/nil out the obsolete elements, for GC
+                       return s[:k]
                }
        }
        return s
@@ -378,20 +379,21 @@ func Compact[S ~[]E, E comparable](s S) S {
 // For runs of elements that compare equal, CompactFunc keeps the first one.
 // CompactFunc zeroes the elements between the new length and the original length.
 func CompactFunc[S ~[]E, E any](s S, eq func(E, E) bool) S {
-       if len(s) > 1 {
-               for k := 1; k < len(s); k++ {
-                       if eq(s[k], s[k-1]) {
-                               s2 := s[k:]
-                               for k2 := 1; k2 < len(s2); k2++ {
-                                       if !eq(s2[k2], s2[k2-1]) {
-                                               s[k] = s2[k2]
-                                               k++
-                                       }
+       if len(s) < 2 {
+               return s
+       }
+       for k := 1; k < len(s); k++ {
+               if eq(s[k], s[k-1]) {
+                       s2 := s[k:]
+                       for k2 := 1; k2 < len(s2); k2++ {
+                               if !eq(s2[k2], s2[k2-1]) {
+                                       s[k] = s2[k2]
+                                       k++
                                }
-
-                               clear(s[k:]) // zero/nil out the obsolete elements, for GC
-                               return s[:k]
                        }
+
+                       clear(s[k:]) // zero/nil out the obsolete elements, for GC
+                       return s[:k]
                }
        }
        return s