diff options
author | Eric Pauley <eric@pauley.me> | 2018-04-29 00:15:03 -0400 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2018-05-01 18:52:19 +0000 |
commit | 9d11c63b64d1f29f43cfd7397614baa24c72a151 (patch) | |
tree | b716a94ccd9561dcb5162b746138dc9077903d46 /src/bytes | |
parent | a5b80d469a1d07f77067075f9cbff80f5edc2323 (diff) | |
download | go-9d11c63b64d1f29f43cfd7397614baa24c72a151.tar.gz go-9d11c63b64d1f29f43cfd7397614baa24c72a151.zip |
bytes, strings: improve EqualFold fast version for ASCII
The existing implementation only considers the special ASCII
case when the lower character is an upper case letter. This
means that most ASCII comparisons use unicode.SimpleFold even
when it is not necessary.
benchmark old ns/op new ns/op delta
BenchmarkEqualFold-8 450 390 -13.33%
Change-Id: I735ca3c30fc0145c186d2a54f31fd39caab2c3fa
Reviewed-on: https://go-review.googlesource.com/110018
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/bytes')
-rw-r--r-- | src/bytes/bytes.go | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/bytes/bytes.go b/src/bytes/bytes.go index 32bf6ab30d..437a6e12df 100644 --- a/src/bytes/bytes.go +++ b/src/bytes/bytes.go @@ -805,9 +805,9 @@ func EqualFold(s, t []byte) bool { tr, sr = sr, tr } // Fast check for ASCII. - if tr < utf8.RuneSelf && 'A' <= sr && sr <= 'Z' { - // ASCII, and sr is upper case. tr must be lower case. - if tr == sr+'a'-'A' { + if tr < utf8.RuneSelf { + // ASCII only, sr/tr must be upper/lower case + if 'A' <= sr && sr <= 'Z' && tr == sr+'a'-'A' { continue } return false |