Commit 2db47c90 authored by Kyle Consalus's avatar Kyle Consalus Committed by Robert Griesemer

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
parent bcdcf395
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment