Commit 272ec231 authored by Alberto Donizetti's avatar Alberto Donizetti Committed by Brad Fitzpatrick

strings: make parameters names less confusing

Using 'sep' as parameter name for strings functions that take a
separator argument is fine, but for functions like Index or Count that
look for a substring it's better to use 'substr' (like Contains
already does).

Fixes #19039

Change-Id: Idd557409c8fea64ce830ab0e3fec37d3d56a79f0
Reviewed-on: https://go-review.googlesource.com/36874
Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
parent 2ceeb7b0
...@@ -72,21 +72,21 @@ func hashStrRev(sep string) (uint32, uint32) { ...@@ -72,21 +72,21 @@ func hashStrRev(sep string) (uint32, uint32) {
return hash, pow return hash, pow
} }
// Count counts the number of non-overlapping instances of sep in s. // Count counts the number of non-overlapping instances of substr in s.
// If sep is an empty string, Count returns 1 + the number of Unicode code points in s. // If substr is an empty string, Count returns 1 + the number of Unicode code points in s.
func Count(s, sep string) int { func Count(s, substr string) int {
n := 0 n := 0
// special case // special case
if len(sep) == 0 { if len(substr) == 0 {
return utf8.RuneCountInString(s) + 1 return utf8.RuneCountInString(s) + 1
} }
for { for {
i := Index(s, sep) i := Index(s, substr)
if i == -1 { if i == -1 {
return n return n
} }
n++ n++
s = s[i+len(sep):] s = s[i+len(substr):]
} }
} }
...@@ -105,16 +105,16 @@ func ContainsRune(s string, r rune) bool { ...@@ -105,16 +105,16 @@ func ContainsRune(s string, r rune) bool {
return IndexRune(s, r) >= 0 return IndexRune(s, r) >= 0
} }
// LastIndex returns the index of the last instance of sep in s, or -1 if sep is not present in s. // LastIndex returns the index of the last instance of substr in s, or -1 if substr is not present in s.
func LastIndex(s, sep string) int { func LastIndex(s, substr string) int {
n := len(sep) n := len(substr)
switch { switch {
case n == 0: case n == 0:
return len(s) return len(s)
case n == 1: case n == 1:
return LastIndexByte(s, sep[0]) return LastIndexByte(s, substr[0])
case n == len(s): case n == len(s):
if sep == s { if substr == s {
return 0 return 0
} }
return -1 return -1
...@@ -122,20 +122,20 @@ func LastIndex(s, sep string) int { ...@@ -122,20 +122,20 @@ func LastIndex(s, sep string) int {
return -1 return -1
} }
// Rabin-Karp search from the end of the string // Rabin-Karp search from the end of the string
hashsep, pow := hashStrRev(sep) hashss, pow := hashStrRev(substr)
last := len(s) - n last := len(s) - n
var h uint32 var h uint32
for i := len(s) - 1; i >= last; i-- { for i := len(s) - 1; i >= last; i-- {
h = h*primeRK + uint32(s[i]) h = h*primeRK + uint32(s[i])
} }
if h == hashsep && s[last:] == sep { if h == hashss && s[last:] == substr {
return last return last
} }
for i := last - 1; i >= 0; i-- { for i := last - 1; i >= 0; i-- {
h *= primeRK h *= primeRK
h += uint32(s[i]) h += uint32(s[i])
h -= pow * uint32(s[i+n]) h -= pow * uint32(s[i+n])
if h == hashsep && s[i:i+n] == sep { if h == hashss && s[i:i+n] == substr {
return i return i
} }
} }
......
...@@ -21,27 +21,27 @@ func init() { ...@@ -21,27 +21,27 @@ func init() {
} }
} }
// Index returns the index of the first instance of sep in s, or -1 if sep is not present in s. // Index returns the index of the first instance of substr in s, or -1 if substr is not present in s.
func Index(s, sep string) int { func Index(s, substr string) int {
n := len(sep) n := len(substr)
switch { switch {
case n == 0: case n == 0:
return 0 return 0
case n == 1: case n == 1:
return IndexByte(s, sep[0]) return IndexByte(s, substr[0])
case n == len(s): case n == len(s):
if sep == s { if substr == s {
return 0 return 0
} }
return -1 return -1
case n > len(s): case n > len(s):
return -1 return -1
case n <= shortStringLen: case n <= shortStringLen:
// Use brute force when s and sep both are small // Use brute force when s and substr both are small
if len(s) <= 64 { if len(s) <= 64 {
return indexShortStr(s, sep) return indexShortStr(s, substr)
} }
c := sep[0] c := substr[0]
i := 0 i := 0
t := s[:len(s)-n+1] t := s[:len(s)-n+1]
fails := 0 fails := 0
...@@ -55,7 +55,7 @@ func Index(s, sep string) int { ...@@ -55,7 +55,7 @@ func Index(s, sep string) int {
} }
i += o i += o
} }
if s[i:i+n] == sep { if s[i:i+n] == substr {
return i return i
} }
fails++ fails++
...@@ -64,7 +64,7 @@ func Index(s, sep string) int { ...@@ -64,7 +64,7 @@ func Index(s, sep string) int {
// Too many means more that 1 error per 8 characters. // Too many means more that 1 error per 8 characters.
// Allow some errors in the beginning. // Allow some errors in the beginning.
if fails > (i+16)/8 { if fails > (i+16)/8 {
r := indexShortStr(s[i:], sep) r := indexShortStr(s[i:], substr)
if r >= 0 { if r >= 0 {
return r + i return r + i
} }
...@@ -74,12 +74,12 @@ func Index(s, sep string) int { ...@@ -74,12 +74,12 @@ func Index(s, sep string) int {
return -1 return -1
} }
// Rabin-Karp search // Rabin-Karp search
hashsep, pow := hashStr(sep) hashss, pow := hashStr(substr)
var h uint32 var h uint32
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
h = h*primeRK + uint32(s[i]) h = h*primeRK + uint32(s[i])
} }
if h == hashsep && s[:n] == sep { if h == hashss && s[:n] == substr {
return 0 return 0
} }
for i := n; i < len(s); { for i := n; i < len(s); {
...@@ -87,7 +87,7 @@ func Index(s, sep string) int { ...@@ -87,7 +87,7 @@ func Index(s, sep string) int {
h += uint32(s[i]) h += uint32(s[i])
h -= pow * uint32(s[i-n]) h -= pow * uint32(s[i-n])
i++ i++
if h == hashsep && s[i-n:i] == sep { if h == hashss && s[i-n:i] == substr {
return i - n return i - n
} }
} }
......
...@@ -9,16 +9,16 @@ package strings ...@@ -9,16 +9,16 @@ package strings
// TODO: implements short string optimization on non amd64 platforms // TODO: implements short string optimization on non amd64 platforms
// and get rid of strings_amd64.go // and get rid of strings_amd64.go
// Index returns the index of the first instance of sep in s, or -1 if sep is not present in s. // Index returns the index of the first instance of substr in s, or -1 if substr is not present in s.
func Index(s, sep string) int { func Index(s, substr string) int {
n := len(sep) n := len(substr)
switch { switch {
case n == 0: case n == 0:
return 0 return 0
case n == 1: case n == 1:
return IndexByte(s, sep[0]) return IndexByte(s, substr[0])
case n == len(s): case n == len(s):
if sep == s { if substr == s {
return 0 return 0
} }
return -1 return -1
...@@ -26,12 +26,12 @@ func Index(s, sep string) int { ...@@ -26,12 +26,12 @@ func Index(s, sep string) int {
return -1 return -1
} }
// Rabin-Karp search // Rabin-Karp search
hashsep, pow := hashStr(sep) hashss, pow := hashStr(substr)
var h uint32 var h uint32
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
h = h*primeRK + uint32(s[i]) h = h*primeRK + uint32(s[i])
} }
if h == hashsep && s[:n] == sep { if h == hashss && s[:n] == substr {
return 0 return 0
} }
for i := n; i < len(s); { for i := n; i < len(s); {
...@@ -39,7 +39,7 @@ func Index(s, sep string) int { ...@@ -39,7 +39,7 @@ func Index(s, sep string) int {
h += uint32(s[i]) h += uint32(s[i])
h -= pow * uint32(s[i-n]) h -= pow * uint32(s[i-n])
i++ i++
if h == hashsep && s[i-n:i] == sep { if h == hashss && s[i-n:i] == substr {
return i - n return i - n
} }
} }
......
...@@ -24,27 +24,27 @@ func init() { ...@@ -24,27 +24,27 @@ func init() {
} }
} }
// Index returns the index of the first instance of sep in s, or -1 if sep is not present in s. // Index returns the index of the first instance of substr in s, or -1 if substr is not present in s.
func Index(s, sep string) int { func Index(s, substr string) int {
n := len(sep) n := len(substr)
switch { switch {
case n == 0: case n == 0:
return 0 return 0
case n == 1: case n == 1:
return IndexByte(s, sep[0]) return IndexByte(s, substr[0])
case n == len(s): case n == len(s):
if sep == s { if substr == s {
return 0 return 0
} }
return -1 return -1
case n > len(s): case n > len(s):
return -1 return -1
case n <= shortStringLen: case n <= shortStringLen:
// Use brute force when s and sep both are small // Use brute force when s and substr both are small
if len(s) <= 64 { if len(s) <= 64 {
return indexShortStr(s, sep) return indexShortStr(s, substr)
} }
c := sep[0] c := substr[0]
i := 0 i := 0
t := s[:len(s)-n+1] t := s[:len(s)-n+1]
fails := 0 fails := 0
...@@ -58,7 +58,7 @@ func Index(s, sep string) int { ...@@ -58,7 +58,7 @@ func Index(s, sep string) int {
} }
i += o i += o
} }
if s[i:i+n] == sep { if s[i:i+n] == substr {
return i return i
} }
fails++ fails++
...@@ -67,7 +67,7 @@ func Index(s, sep string) int { ...@@ -67,7 +67,7 @@ func Index(s, sep string) int {
// Too many means more that 1 error per 8 characters. // Too many means more that 1 error per 8 characters.
// Allow some errors in the beginning. // Allow some errors in the beginning.
if fails > (i+16)/8 { if fails > (i+16)/8 {
r := indexShortStr(s[i:], sep) r := indexShortStr(s[i:], substr)
if r >= 0 { if r >= 0 {
return r + i return r + i
} }
...@@ -77,12 +77,12 @@ func Index(s, sep string) int { ...@@ -77,12 +77,12 @@ func Index(s, sep string) int {
return -1 return -1
} }
// Rabin-Karp search // Rabin-Karp search
hashsep, pow := hashStr(sep) hashss, pow := hashStr(substr)
var h uint32 var h uint32
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
h = h*primeRK + uint32(s[i]) h = h*primeRK + uint32(s[i])
} }
if h == hashsep && s[:n] == sep { if h == hashss && s[:n] == substr {
return 0 return 0
} }
for i := n; i < len(s); { for i := n; i < len(s); {
...@@ -90,7 +90,7 @@ func Index(s, sep string) int { ...@@ -90,7 +90,7 @@ func Index(s, sep string) int {
h += uint32(s[i]) h += uint32(s[i])
h -= pow * uint32(s[i-n]) h -= pow * uint32(s[i-n])
i++ i++
if h == hashsep && s[i-n:i] == sep { if h == hashss && s[i-n:i] == substr {
return i - n return i - n
} }
} }
......
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