From 49d97fdf9540482c4e9b49005457aaa2b7f60e48 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 26 Apr 2010 10:02:01 -0700 Subject: bytes: add Next method to Buffer, simplify Read. R=r CC=golang-dev http://codereview.appspot.com/980043 --- src/pkg/bytes/buffer.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/pkg/bytes/buffer.go') diff --git a/src/pkg/bytes/buffer.go b/src/pkg/bytes/buffer.go index faccca3be..7a996c4ca 100644 --- a/src/pkg/bytes/buffer.go +++ b/src/pkg/bytes/buffer.go @@ -196,17 +196,23 @@ func (b *Buffer) Read(p []byte) (n int, err os.Error) { b.Truncate(0) return 0, os.EOF } - m := b.Len() - n = len(p) + n = copy(p, b.buf[b.off:]) + b.off += n + return +} +// Next returns a slice containing the next n bytes from the buffer, +// advancing the buffer as if the bytes had been returned by Read. +// If there are fewer than n bytes in the buffer, Next returns the entire buffer. +// The slice is only valid until the next call to a read or write method. +func (b *Buffer) Next(n int) []byte { + m := b.Len() if n > m { - // more bytes requested than available n = m } - - copy(p, b.buf[b.off:b.off+n]) + data := b.buf[b.off : b.off+n] b.off += n - return n, err + return data } // ReadByte reads and returns the next byte from the buffer. -- cgit v1.2.3