]> Cypherpunks repositories - gostls13.git/commitdiff
bytes: return early in Repeat if count is 0
authorTobias Klauser <tklauser@distanz.ch>
Sat, 9 Mar 2019 13:11:40 +0000 (14:11 +0100)
committerTobias Klauser <tobias.klauser@gmail.com>
Sat, 9 Mar 2019 14:17:13 +0000 (14:17 +0000)
This matches the implementation of strings.Repeat and slightly increases
performance:

name      old time/op  new time/op  delta
Repeat-8   145ns ±12%   125ns ±29%  -13.35%  (p=0.009 n=10+10)

Change-Id: Ic0a0e2ea9e36591286a49def320ddb67fe0b2c50
Reviewed-on: https://go-review.googlesource.com/c/go/+/166399
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/bytes/bytes.go

index f65bf214cc55ddab5cf84c9ffb03cc799f5c7af1..6fcebe65930061113b96e50b2ff98f9d9045ea99 100644 (file)
@@ -499,13 +499,16 @@ func Map(mapping func(r rune) rune, s []byte) []byte {
 // It panics if count is negative or if
 // the result of (len(b) * count) overflows.
 func Repeat(b []byte, count int) []byte {
+       if count == 0 {
+               return []byte{}
+       }
        // Since we cannot return an error on overflow,
        // we should panic if the repeat will generate
        // an overflow.
        // See Issue golang.org/issue/16237.
        if count < 0 {
                panic("bytes: negative Repeat count")
-       } else if count > 0 && len(b)*count/count != len(b) {
+       } else if len(b)*count/count != len(b) {
                panic("bytes: Repeat count causes overflow")
        }