mirror of
https://github.com/golang/go
synced 2024-11-20 03:04:40 -07: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:
parent
f22ba1f247
commit
b71f39612a
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user