libgo: update to go1.9
[official-gcc.git] / libgo / go / bytes / bytes_generic.go
blob75a9c36dc42d85408cd346246951a75d21b51475
1 // Copyright 2015 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 // -build !amd64,!s390x
7 package bytes
9 // TODO: implements short string optimization on non amd64 platforms
10 // and get rid of bytes_amd64.go
12 // Index returns the index of the first instance of sep in s, or -1 if sep is not present in s.
13 func Index(s, sep []byte) int {
14 n := len(sep)
15 if n == 0 {
16 return 0
18 if n > len(s) {
19 return -1
21 c := sep[0]
22 if n == 1 {
23 return IndexByte(s, c)
25 i := 0
26 t := s[:len(s)-n+1]
27 for i < len(t) {
28 if t[i] != c {
29 o := IndexByte(t[i:], c)
30 if o < 0 {
31 break
33 i += o
35 if Equal(s[i:i+n], sep) {
36 return i
38 i++
40 return -1
43 // Count counts the number of non-overlapping instances of sep in s.
44 // If sep is an empty slice, Count returns 1 + the number of Unicode code points in s.
45 func Count(s, sep []byte) int {
46 return countGeneric(s, sep)