replace skipWhiteSpace goto by loop

This commit is contained in:
IncSW 2021-05-03 13:44:44 +03:00
parent 1adac38695
commit f8aac1e69f
No known key found for this signature in database
GPG Key ID: 89876FA64BFB2D57
2 changed files with 44 additions and 3 deletions

View File

@ -20,10 +20,8 @@ func char(ptr unsafe.Pointer, offset int64) byte {
} }
func skipWhiteSpace(buf []byte, cursor int64) int64 { func skipWhiteSpace(buf []byte, cursor int64) int64 {
LOOP: for isWhiteSpace[buf[cursor]] {
if isWhiteSpace[buf[cursor]] {
cursor++ cursor++
goto LOOP
} }
return cursor return cursor
} }

View File

@ -3508,3 +3508,46 @@ func TestDecodeBackSlash(t *testing.T) {
}) })
}) })
} }
var (
isWhiteSpace = [256]bool{}
)
func init() {
isWhiteSpace[' '] = true
isWhiteSpace['\n'] = true
isWhiteSpace['\t'] = true
isWhiteSpace['\r'] = true
}
func skipWhiteSpace(buf []byte, cursor int64) int64 {
LOOP:
if isWhiteSpace[buf[cursor]] {
cursor++
goto LOOP
}
return cursor
}
func skipWhiteSpaceLoop(buf []byte, cursor int64) int64 {
for isWhiteSpace[buf[cursor]] {
cursor++
}
return cursor
}
func BenchmarkSkipWhiteSpace(b *testing.B) {
data := []byte(" \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t \n\r\t}")
b.ReportAllocs()
b.ResetTimer()
b.Run("gotoLabel", func(b *testing.B) {
for i := 0; i < b.N; i++ {
skipWhiteSpace(data, 0)
}
})
b.Run("loop", func(b *testing.B) {
for i := 0; i < b.N; i++ {
skipWhiteSpaceLoop(data, 0)
}
})
}