1
0
mirror of https://github.com/golang/go synced 2024-11-20 04:14:49 -07:00

Trivial optimization.

Cached string indexing in inner loop of Btoui64.

    Before:
    strconv_test.BenchmarkAtoi   5000000           309 ns/op
    strconv_test.BenchmarkAtoiNeg    5000000           325 ns/op
    strconv_test.BenchmarkAtoi64     5000000           465 ns/op
    strconv_test.BenchmarkAtoi64Neg  5000000           469 ns/op

    After:
    strconv_test.BenchmarkAtoi  10000000           182 ns/op
    strconv_test.BenchmarkAtoiNeg   10000000           193 ns/op
    strconv_test.BenchmarkAtoi64    10000000           251 ns/op
    strconv_test.BenchmarkAtoi64Neg 10000000           258 ns/op

R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/1227042
This commit is contained in:
Kyle Consalus 2010-05-18 16:29:24 -07:00 committed by Robert Griesemer
parent bcdcf395e5
commit 2db47c9083

View File

@ -77,13 +77,14 @@ func Btoui64(s string, b int) (n uint64, err os.Error) {
for i := 0; i < len(s); i++ {
var v byte
d := s[i]
switch {
case '0' <= s[i] && s[i] <= '9':
v = s[i] - '0'
case 'a' <= s[i] && s[i] <= 'z':
v = s[i] - 'a' + 10
case 'A' <= s[i] && s[i] <= 'Z':
v = s[i] - 'A' + 10
case '0' <= d && d <= '9':
v = d - '0'
case 'a' <= d && d <= 'z':
v = d - 'a' + 10
case 'A' <= d && d <= 'Z':
v = d - 'A' + 10
default:
n = 0
err = os.EINVAL