| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package bpool
- import (
- "bytes"
- )
- /*
- BufferPool implements a pool of bytes.Buffers in the form of a bounded
- channel.
- */
- type BufferPool struct {
- c chan *bytes.Buffer
- }
- /*
- NewBufferPool creates a new BufferPool bounded to the given size.
- */
- func NewBufferPool(size int) (bp *BufferPool) {
- return &BufferPool{
- c: make(chan *bytes.Buffer, size),
- }
- }
- /*
- Get gets a Buffer from the BufferPool, or creates a new one if none are available
- in the pool.
- */
- func (bp *BufferPool) Get() (b *bytes.Buffer) {
- select {
- case b = <-bp.c:
- // reuse existing buffer
- default:
- // create new buffer
- b = bytes.NewBuffer([]byte{})
- }
- return
- }
- /*
- Put returns the given Buffer to the BufferPool.
- */
- func (bp *BufferPool) Put(b *bytes.Buffer) {
- b.Reset()
- bp.c <- b
- }
|