aboutsummaryrefslogtreecommitdiff
path: root/src/bytes/bytes_generic.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2018-03-04 09:47:47 -0800
committerKeith Randall <khr@golang.org>2018-03-04 19:49:44 +0000
commitee58eccc565c0871d3f16fd702fd8649a3fb61ea (patch)
tree837073b78954dc987cf575ff478faf6fdb8afb0e /src/bytes/bytes_generic.go
parentf6332bb84ad87e958290ae23b29a2b13a41ee2a2 (diff)
downloadgo-ee58eccc565c0871d3f16fd702fd8649a3fb61ea.tar.xz
internal/bytealg: move short string Index implementations into bytealg
Also move the arm64 CountByte implementation while we're here. Fixes #19792 Change-Id: I1e0fdf1e03e3135af84150a2703b58dad1b0d57e Reviewed-on: https://go-review.googlesource.com/98518 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/bytes/bytes_generic.go')
-rw-r--r--src/bytes/bytes_generic.go59
1 files changed, 0 insertions, 59 deletions
diff --git a/src/bytes/bytes_generic.go b/src/bytes/bytes_generic.go
deleted file mode 100644
index 347d28473f..0000000000
--- a/src/bytes/bytes_generic.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !amd64,!s390x,!arm64
-
-package bytes
-
-// Index returns the index of the first instance of sep in s, or -1 if sep is not present in s.
-func Index(s, sep []byte) int {
- n := len(sep)
- switch {
- case n == 0:
- return 0
- case n == 1:
- return IndexByte(s, sep[0])
- case n == len(s):
- if Equal(sep, s) {
- return 0
- }
- return -1
- case n > len(s):
- return -1
- }
- c := sep[0]
- i := 0
- fails := 0
- t := s[:len(s)-n+1]
- for i < len(t) {
- if t[i] != c {
- o := IndexByte(t[i:], c)
- if o < 0 {
- break
- }
- i += o
- }
- if Equal(s[i:i+n], sep) {
- return i
- }
- i++
- fails++
- if fails >= 4+i>>4 && i < len(t) {
- // Give up on IndexByte, it isn't skipping ahead
- // far enough to be better than Rabin-Karp.
- // Experiments (using IndexPeriodic) suggest
- // the cutover is about 16 byte skips.
- // TODO: if large prefixes of sep are matching
- // we should cutover at even larger average skips,
- // because Equal becomes that much more expensive.
- // This code does not take that effect into account.
- j := indexRabinKarp(s[i:], sep)
- if j < 0 {
- return -1
- }
- return i + j
- }
- }
- return -1
-}