diff --git a/enc.go b/enc.go index 6eeae25..24e3310 100644 --- a/enc.go +++ b/enc.go @@ -59,6 +59,11 @@ func (e *Encoder) ResetWriter(out io.Writer) { e.first = e.first[:0] } +// Grow grows the underlying buffer +func (e *Encoder) Grow(n int) { + e.w.Grow(n) +} + // Bytes returns underlying buffer. func (e Encoder) Bytes() []byte { return e.w.Buf } diff --git a/enc_test.go b/enc_test.go index 6e8febd..a9c8bd0 100644 --- a/enc_test.go +++ b/enc_test.go @@ -32,6 +32,22 @@ func requireCompat(t *testing.T, cb func(*Encoder), v any) { testEncoderModes(t, cb, string(buf)) } +func TestEncoderGrow(t *testing.T) { + should := require.New(t) + e := &Encoder{} + should.Equal(0, len(e.Bytes())) + should.Equal(0, cap(e.Bytes())) + e.Grow(1024) + should.Equal(0, len(e.Bytes())) + should.Equal(1024, cap(e.Bytes())) + e.Grow(512) + should.Equal(0, len(e.Bytes())) + should.Equal(1024, cap(e.Bytes())) + e.Grow(4096) + should.Equal(0, len(e.Bytes())) + should.Equal(4096, cap(e.Bytes())) +} + func TestEncoderByteShouldGrowBuffer(t *testing.T) { should := require.New(t) e := GetEncoder() diff --git a/w.go b/w.go index db396c8..005a39a 100644 --- a/w.go +++ b/w.go @@ -1,6 +1,9 @@ package jx -import "io" +import ( + "bytes" + "io" +) // Writer writes json tokens to underlying buffer. // @@ -51,6 +54,15 @@ func (w *Writer) ResetWriter(out io.Writer) { w.stream.Reset(out) } +// Grow grows the underlying buffer. +// +// Calls (*bytes.Buffer).Grow(n int) on w.Buf. +func (w *Writer) Grow(n int) { + buf := bytes.NewBuffer(w.Buf) + buf.Grow(n) + w.Buf = buf.Bytes() +} + // byte writes a single byte. func (w *Writer) byte(c byte) (fail bool) { if w.stream == nil { diff --git a/w_test.go b/w_test.go index 5c701b0..65f7424 100644 --- a/w_test.go +++ b/w_test.go @@ -23,3 +23,19 @@ func TestWriter_String(t *testing.T) { w.True() require.Equal(t, "true", w.String()) } + +func TestWriter_Grow(t *testing.T) { + should := require.New(t) + e := &Writer{} + should.Equal(0, len(e.Buf)) + should.Equal(0, cap(e.Buf)) + e.Grow(1024) + should.Equal(0, len(e.Buf)) + should.Equal(1024, cap(e.Buf)) + e.Grow(512) + should.Equal(0, len(e.Buf)) + should.Equal(1024, cap(e.Buf)) + e.Grow(4096) + should.Equal(0, len(e.Buf)) + should.Equal(4096, cap(e.Buf)) +}