]> Cypherpunks repositories - gostls13.git/commit
encoding/base32: simplify and speed up decoder
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 16 Dec 2018 18:11:28 +0000 (19:11 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Tue, 26 Feb 2019 19:20:07 +0000 (19:20 +0000)
commite90e7a59dc1aa9cd488400d58405064943b4d3c0
treef8047648854b3a911fa3b49ee1f2602a2a53a9e6
parentda50e10c2e80e8c4f53a0bb1d20de57995abc7ca
encoding/base32: simplify and speed up decoder

First, we can lift the enc.decodeMap nil check out of the loop.

Second, we can make it clear to the compiler that 'in := src[0]' doesn't
need a bounds check, by making len(src)==0 a single if check that always
stops the loop. This is by far the largest speed-up.

Third, we can use a dst slice index instead of reslicing dst, which
removes work from the loop body.

While at it, we can merge the two 'switch dlen' pieces of code, which
simplifies the code and doesn't affect performance.

name            old time/op    new time/op    delta
DecodeString-8    80.2µs ± 0%    67.5µs ± 0%  -15.81%  (p=0.002 n=6+6)

name            old speed      new speed      delta
DecodeString-8   163MB/s ± 0%   194MB/s ± 0%  +18.78%  (p=0.002 n=6+6)

Change-Id: Iefeaae94c03453f8760452b1da706a77b3522718
Reviewed-on: https://go-review.googlesource.com/c/154422
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/encoding/base32/base32.go