Commit b71f3961 authored by Gabriel Aszalos's avatar Gabriel Aszalos Committed by Ian Lance Taylor

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: default avatarIan Lance Taylor <iant@golang.org>
parent f22ba1f2
...@@ -144,29 +144,27 @@ func IndexRune(s []byte, r rune) int { ...@@ -144,29 +144,27 @@ 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 i
}
} }
return -1
} }
return -1
} }
var width int }
for i := 0; i < len(s); i += width { var width int
r := rune(s[i]) for i := 0; i < len(s); i += width {
if r < utf8.RuneSelf { r := rune(s[i])
width = 1 if r < utf8.RuneSelf {
} else { width = 1
r, width = utf8.DecodeRune(s[i:]) } else {
} r, width = utf8.DecodeRune(s[i:])
for _, ch := range chars { }
if r == ch { for _, ch := range chars {
return i if r == ch {
} return i
} }
} }
} }
...@@ -178,24 +176,22 @@ func IndexAny(s []byte, chars string) int { ...@@ -178,24 +176,22 @@ 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 i
}
} }
return -1
} }
return -1
} }
for i := len(s); i > 0; { }
r, size := utf8.DecodeLastRune(s[:i]) for i := len(s); i > 0; {
i -= size r, size := utf8.DecodeLastRune(s[:i])
for _, c := range chars { i -= size
if r == c { for _, c := range chars {
return i if r == c {
} return i
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment