mirror of
https://github.com/rclone/rclone.git
synced 2024-11-23 08:54:10 +01:00
40 lines
833 B
Go
40 lines
833 B
Go
package buffer
|
|
|
|
import "sync"
|
|
|
|
// A BytesBufferPool is a type-safe wrapper around a sync.BytesBufferPool.
|
|
type BytesBufferPool struct {
|
|
p *sync.Pool
|
|
}
|
|
|
|
// NewBytesPool constructs a new BytesBufferPool.
|
|
func NewBytesPool() BytesBufferPool {
|
|
return BytesBufferPool{
|
|
p: &sync.Pool{
|
|
New: func() interface{} {
|
|
return &BytesBuffer{bs: make([]byte, 0, defaultSize)}
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// Get retrieves a BytesBuffer from the pool, creating one if necessary.
|
|
func (p BytesBufferPool) Get() *BytesBuffer {
|
|
buf := p.p.Get().(*BytesBuffer)
|
|
buf.Reset()
|
|
buf.pool = p
|
|
return buf
|
|
}
|
|
|
|
func (p BytesBufferPool) put(buf *BytesBuffer) {
|
|
p.p.Put(buf)
|
|
}
|
|
|
|
// GlobalBytesPool returns the global buffer pool.
|
|
func GlobalBytesPool() *BytesBufferPool {
|
|
return &bytesPool
|
|
}
|
|
|
|
// bytesPool is a pool of buffer bytes.
|
|
var bytesPool = NewBytesPool()
|