1
0
mirror of https://github.com/golang/go synced 2024-10-03 07:21:21 -06:00

bytes: improve readability of IndexAny and LastIndexAny functions

This change removes the check of len(chars) > 0 inside the Index and
IndexAny functions which was redundant.

Change-Id: Ic4bf8b8a37d7f040d3ebd81b4fc45fcb386b639a
Reviewed-on: https://go-review.googlesource.com/65851
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Gabriel Aszalos 2017-09-25 13:01:36 +02:00 committed by Ian Lance Taylor
parent f22ba1f247
commit b71f39612a

View File

@ -144,30 +144,28 @@ func IndexRune(s []byte, r rune) int {
// code points in chars. It returns -1 if chars is empty or if there is no code // code points in chars. It returns -1 if chars is empty or if there is no code
// point in common. // point in common.
func IndexAny(s []byte, chars string) int { func IndexAny(s []byte, chars string) int {
if len(chars) > 0 { if len(s) > 8 {
if len(s) > 8 { if as, isASCII := makeASCIISet(chars); isASCII {
if as, isASCII := makeASCIISet(chars); isASCII { for i, c := range s {
for i, c := range s { if as.contains(c) {
if as.contains(c) {
return i
}
}
return -1
}
}
var width int
for i := 0; i < len(s); i += width {
r := rune(s[i])
if r < utf8.RuneSelf {
width = 1
} else {
r, width = utf8.DecodeRune(s[i:])
}
for _, ch := range chars {
if r == ch {
return i return i
} }
} }
return -1
}
}
var width int
for i := 0; i < len(s); i += width {
r := rune(s[i])
if r < utf8.RuneSelf {
width = 1
} else {
r, width = utf8.DecodeRune(s[i:])
}
for _, ch := range chars {
if r == ch {
return i
}
} }
} }
return -1 return -1
@ -178,25 +176,23 @@ func IndexAny(s []byte, chars string) int {
// the Unicode code points in chars. It returns -1 if chars is empty or if // the Unicode code points in chars. It returns -1 if chars is empty or if
// there is no code point in common. // there is no code point in common.
func LastIndexAny(s []byte, chars string) int { func LastIndexAny(s []byte, chars string) int {
if len(chars) > 0 { if len(s) > 8 {
if len(s) > 8 { if as, isASCII := makeASCIISet(chars); isASCII {
if as, isASCII := makeASCIISet(chars); isASCII { for i := len(s) - 1; i >= 0; i-- {
for i := len(s) - 1; i >= 0; i-- { if as.contains(s[i]) {
if as.contains(s[i]) {
return i
}
}
return -1
}
}
for i := len(s); i > 0; {
r, size := utf8.DecodeLastRune(s[:i])
i -= size
for _, c := range chars {
if r == c {
return i return i
} }
} }
return -1
}
}
for i := len(s); i > 0; {
r, size := utf8.DecodeLastRune(s[:i])
i -= size
for _, c := range chars {
if r == c {
return i
}
} }
} }
return -1 return -1