From 6128ff84f1106af4944f50f74070566e87f2cb35 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Wed, 1 Nov 2017 19:00:05 +0000 Subject: [PATCH] bufio: add Reader.Size and Writer.Size accessors Fixes #21343 Change-Id: I3582fced902592fe12bfa29acf7b40b6e5e554a7 Reviewed-on: https://go-review.googlesource.com/75150 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Robert Griesemer --- src/bufio/bufio.go | 6 ++++++ src/bufio/bufio_test.go | 18 ++++++++++++++++++ src/bufio/export_test.go | 2 ++ 3 files changed, 26 insertions(+) diff --git a/src/bufio/bufio.go b/src/bufio/bufio.go index da94a2503f..ad9c9f5ddf 100644 --- a/src/bufio/bufio.go +++ b/src/bufio/bufio.go @@ -62,6 +62,9 @@ func NewReader(rd io.Reader) *Reader { return NewReaderSize(rd, defaultBufSize) } +// Size returns the size of the underlying buffer in bytes. +func (r *Reader) Size() int { return len(r.buf) } + // Reset discards any buffered data, resets all state, and switches // the buffered reader to read from r. func (b *Reader) Reset(r io.Reader) { @@ -548,6 +551,9 @@ func NewWriter(w io.Writer) *Writer { return NewWriterSize(w, defaultBufSize) } +// Size returns the size of the underlying buffer in bytes. +func (b *Writer) Size() int { return len(b.buf) } + // Reset discards any unflushed buffered data, clears any error, and // resets b to write its output to w. func (b *Writer) Reset(w io.Writer) { diff --git a/src/bufio/bufio_test.go b/src/bufio/bufio_test.go index ef0f6c834e..c829d2b064 100644 --- a/src/bufio/bufio_test.go +++ b/src/bufio/bufio_test.go @@ -1418,6 +1418,24 @@ func TestReaderDiscard(t *testing.T) { } +func TestReaderSize(t *testing.T) { + if got, want := NewReader(nil).Size(), DefaultBufSize; got != want { + t.Errorf("NewReader's Reader.Size = %d; want %d", got, want) + } + if got, want := NewReaderSize(nil, 1234).Size(), 1234; got != want { + t.Errorf("NewReaderSize's Reader.Size = %d; want %d", got, want) + } +} + +func TestWriterSize(t *testing.T) { + if got, want := NewWriter(nil).Size(), DefaultBufSize; got != want { + t.Errorf("NewWriter's Writer.Size = %d; want %d", got, want) + } + if got, want := NewWriterSize(nil, 1234).Size(), 1234; got != want { + t.Errorf("NewWriterSize's Writer.Size = %d; want %d", got, want) + } +} + // An onlyReader only implements io.Reader, no matter what other methods the underlying implementation may have. type onlyReader struct { io.Reader diff --git a/src/bufio/export_test.go b/src/bufio/export_test.go index 3d3bb27d8d..1667f01a84 100644 --- a/src/bufio/export_test.go +++ b/src/bufio/export_test.go @@ -11,6 +11,8 @@ import ( var IsSpace = isSpace +const DefaultBufSize = defaultBufSize + func (s *Scanner) MaxTokenSize(n int) { if n < utf8.UTFMax || n > 1e9 { panic("bad max token size") -- 2.48.1