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

strings: 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: Iffbc0f2b3332c6e31c7514b5f644b6fe7bdcfe0d
Reviewed-on: https://go-review.googlesource.com/65910
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarJoe Tsai <thebrokentoaster@gmail.com>
parent 5db7572d
...@@ -166,22 +166,20 @@ func IndexRune(s string, r rune) int { ...@@ -166,22 +166,20 @@ func IndexRune(s string, r rune) int {
// IndexAny returns the index of the first instance of any Unicode code point // IndexAny returns the index of the first instance of any Unicode code point
// from chars in s, or -1 if no Unicode code point from chars is present in s. // from chars in s, or -1 if no Unicode code point from chars is present in s.
func IndexAny(s, chars string) int { func IndexAny(s, 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 := 0; i < len(s); i++ {
for i := 0; i < len(s); i++ { if as.contains(s[i]) {
if as.contains(s[i]) { return i
return i
}
} }
return -1
} }
return -1
} }
for i, c := range s { }
for _, m := range chars { for i, c := range s {
if c == m { for _, m := range chars {
return i if c == m {
} return i
} }
} }
} }
...@@ -192,24 +190,22 @@ func IndexAny(s, chars string) int { ...@@ -192,24 +190,22 @@ func IndexAny(s, chars string) int {
// point from chars in s, or -1 if no Unicode code point from chars is // point from chars in s, or -1 if no Unicode code point from chars is
// present in s. // present in s.
func LastIndexAny(s, chars string) int { func LastIndexAny(s, 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.DecodeLastRuneInString(s[:i]) for i := len(s); i > 0; {
i -= size r, size := utf8.DecodeLastRuneInString(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