mirror of
https://github.com/golang/go
synced 2024-11-23 05:30:07 -07:00
bytes: minor optimization to lastIndexFunc
Before and after: BenchmarkTrimSpace 20000000 81.3 ns/op BenchmarkTrimSpace 50000000 58.0 ns/op (most whitespace trimming is ASCII whitespace) Same optimization appeared a handful of other places in this file, but not here. R=golang-dev, dave CC=golang-dev https://golang.org/cl/7305063
This commit is contained in:
parent
7594440ef1
commit
30a9957aac
@ -571,7 +571,10 @@ func indexFunc(s []byte, f func(r rune) bool, truth bool) int {
|
||||
// inverted.
|
||||
func lastIndexFunc(s []byte, f func(r rune) bool, truth bool) int {
|
||||
for i := len(s); i > 0; {
|
||||
r, size := utf8.DecodeLastRune(s[0:i])
|
||||
r, size := rune(s[i-1]), 1
|
||||
if r >= utf8.RuneSelf {
|
||||
r, size = utf8.DecodeLastRune(s[0:i])
|
||||
}
|
||||
i -= size
|
||||
if f(r) == truth {
|
||||
return i
|
||||
|
@ -1073,3 +1073,10 @@ func BenchmarkFieldsFunc(b *testing.B) {
|
||||
FieldsFunc(fieldsInput, unicode.IsSpace)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkTrimSpace(b *testing.B) {
|
||||
s := []byte(" Some text. \n")
|
||||
for i := 0; i < b.N; i++ {
|
||||
TrimSpace(s)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user