aboutsummaryrefslogtreecommitdiff
path: root/src/bufio
diff options
context:
space:
mode:
authorandrius4669 <andrius4669@gmail.com>2018-05-17 14:43:30 +0000
committerIan Lance Taylor <iant@golang.org>2018-08-22 17:06:28 +0000
commita21ae28f39fc5a27bb1391802195d1c6e2993f29 (patch)
tree205d2d3ab6b9d7bc1b900f75beba99f3dc62fcdb /src/bufio
parent5ddecd150821713c53de15f439c7925b28c9f535 (diff)
downloadgo-a21ae28f39fc5a27bb1391802195d1c6e2993f29.tar.gz
go-a21ae28f39fc5a27bb1391802195d1c6e2993f29.zip
bufio: avoid rescanning buffer multiple times in ReadSlice
When existing data in buffer does not have delimiter, and new data is added with b.fill(), continue search from previous point instead of starting from beginning. Change-Id: Id78332afe2b0281b4a3c86bd1ffe9449cfea7848 GitHub-Last-Rev: 08e7d2f50151a00b22800e3f7020d0de8dee7dcf GitHub-Pull-Request: golang/go#25441 Reviewed-on: https://go-review.googlesource.com/113535 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/bufio')
-rw-r--r--src/bufio/bufio.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/bufio/bufio.go b/src/bufio/bufio.go
index 480e929f58..8d162b34a0 100644
--- a/src/bufio/bufio.go
+++ b/src/bufio/bufio.go
@@ -314,9 +314,11 @@ func (b *Reader) Buffered() int { return b.w - b.r }
// ReadBytes or ReadString instead.
// ReadSlice returns err != nil if and only if line does not end in delim.
func (b *Reader) ReadSlice(delim byte) (line []byte, err error) {
+ s := 0 // search start index
for {
// Search buffer.
- if i := bytes.IndexByte(b.buf[b.r:b.w], delim); i >= 0 {
+ if i := bytes.IndexByte(b.buf[b.r+s:b.w], delim); i >= 0 {
+ i += s
line = b.buf[b.r : b.r+i+1]
b.r += i + 1
break
@@ -338,6 +340,8 @@ func (b *Reader) ReadSlice(delim byte) (line []byte, err error) {
break
}
+ s = b.w - b.r // do not rescan area we scanned before
+
b.fill() // buffer is not full
}