]> Cypherpunks repositories - gostls13.git/commitdiff
Trivial optimization.
authorKyle Consalus <consalus@gmail.com>
Tue, 18 May 2010 23:29:24 +0000 (16:29 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 18 May 2010 23:29:24 +0000 (16:29 -0700)
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

src/pkg/strconv/atoi.go

index 60492b653b82db49f8b1ba0dd32e9f0c33aed4c5..e82b6cdba7caf2aa7ab1978e1915c9e354deee5e 100644 (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