]> Cypherpunks repositories - gostls13.git/commitdiff
bufio: add Reader.Size and Writer.Size accessors
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 1 Nov 2017 19:00:05 +0000 (19:00 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 2 Nov 2017 17:17:44 +0000 (17:17 +0000)
Fixes #21343

Change-Id: I3582fced902592fe12bfa29acf7b40b6e5e554a7
Reviewed-on: https://go-review.googlesource.com/75150
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/bufio/bufio.go
src/bufio/bufio_test.go
src/bufio/export_test.go

index da94a2503f0a8fdb4caf7ba446511589881a41b0..ad9c9f5ddf79692b38bc445fbe75c8b4ee996ec0 100644 (file)
@@ -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) {
index ef0f6c834e86230f9f7d63c3dfd407022afdb8a7..c829d2b0648ab7c10e55ab006a677776c1c94062 100644 (file)
@@ -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
index 3d3bb27d8da51b72e343579b1e54b115b3becb9a..1667f01a841e07cba04c62e8cf7da7ab3593ca2b 100644 (file)
@@ -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")