diff options
Diffstat (limited to 'vendor/github.com/francoispqt/gojay/encode_stream_pool.go')
-rw-r--r-- | vendor/github.com/francoispqt/gojay/encode_stream_pool.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/vendor/github.com/francoispqt/gojay/encode_stream_pool.go b/vendor/github.com/francoispqt/gojay/encode_stream_pool.go new file mode 100644 index 00000000..3bb8b1af --- /dev/null +++ b/vendor/github.com/francoispqt/gojay/encode_stream_pool.go @@ -0,0 +1,38 @@ +package gojay + +import ( + "io" + "sync" +) + +// NewEncoder returns a new StreamEncoder. +// It takes an io.Writer implementation to output data. +// It initiates the done channel returned by Done(). +func (s stream) NewEncoder(w io.Writer) *StreamEncoder { + enc := BorrowEncoder(w) + return &StreamEncoder{Encoder: enc, nConsumer: 1, done: make(chan struct{}, 1), mux: &sync.RWMutex{}} +} + +// BorrowEncoder borrows a StreamEncoder from the pool. +// It takes an io.Writer implementation to output data. +// It initiates the done channel returned by Done(). +// +// If no StreamEncoder is available in the pool, it returns a fresh one +func (s stream) BorrowEncoder(w io.Writer) *StreamEncoder { + streamEnc := streamEncPool.Get().(*StreamEncoder) + streamEnc.w = w + streamEnc.Encoder.err = nil + streamEnc.done = make(chan struct{}, 1) + streamEnc.Encoder.buf = streamEnc.buf[:0] + streamEnc.nConsumer = 1 + streamEnc.isPooled = 0 + return streamEnc +} + +func (s stream) borrowEncoder(w io.Writer) *StreamEncoder { + streamEnc := streamEncPool.Get().(*StreamEncoder) + streamEnc.isPooled = 0 + streamEnc.w = w + streamEnc.Encoder.err = nil + return streamEnc +} |