diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-pools/bufio.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-pools/bufio.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/vendor/codeberg.org/gruf/go-pools/bufio.go b/vendor/codeberg.org/gruf/go-pools/bufio.go new file mode 100644 index 000000000..8c2ef9730 --- /dev/null +++ b/vendor/codeberg.org/gruf/go-pools/bufio.go @@ -0,0 +1,75 @@ +package pools + +import ( + "bufio" + "io" + "sync" +) + +// BufioReaderPool is a pooled allocator for bufio.Reader objects +type BufioReaderPool interface { + // Get fetches a bufio.Reader from pool and resets to supplied reader + Get(io.Reader) *bufio.Reader + + // Put places supplied bufio.Reader back in pool + Put(*bufio.Reader) +} + +// NewBufioReaderPool returns a newly instantiated bufio.Reader pool +func NewBufioReaderPool(size int) BufioReaderPool { + return &bufioReaderPool{ + Pool: sync.Pool{ + New: func() interface{} { + return bufio.NewReaderSize(nil, size) + }, + }, + } +} + +// bufioReaderPool is our implementation of BufioReaderPool +type bufioReaderPool struct{ sync.Pool } + +func (p *bufioReaderPool) Get(r io.Reader) *bufio.Reader { + br := p.Pool.Get().(*bufio.Reader) + br.Reset(r) + return br +} + +func (p *bufioReaderPool) Put(br *bufio.Reader) { + br.Reset(nil) + p.Pool.Put(br) +} + +// BufioWriterPool is a pooled allocator for bufio.Writer objects +type BufioWriterPool interface { + // Get fetches a bufio.Writer from pool and resets to supplied writer + Get(io.Writer) *bufio.Writer + + // Put places supplied bufio.Writer back in pool + Put(*bufio.Writer) +} + +// NewBufioWriterPool returns a newly instantiated bufio.Writer pool +func NewBufioWriterPool(size int) BufioWriterPool { + return &bufioWriterPool{ + Pool: sync.Pool{ + New: func() interface{} { + return bufio.NewWriterSize(nil, size) + }, + }, + } +} + +// bufioWriterPool is our implementation of BufioWriterPool +type bufioWriterPool struct{ sync.Pool } + +func (p *bufioWriterPool) Get(w io.Writer) *bufio.Writer { + bw := p.Pool.Get().(*bufio.Writer) + bw.Reset(w) + return bw +} + +func (p *bufioWriterPool) Put(bw *bufio.Writer) { + bw.Reset(nil) + p.Pool.Put(bw) +} |